1

struct私は2つのを定義しました

class foo() {
public:
    struct spatialEntry {
        bool block;
        CoherenceState_t state;
    };

    struct accumulationEntry {
        uint64_t offset;
        std::vector<spatialEntry> pattern;
    };

    std::vector<int> v;
    std::list<accumulationEntry> accumulationTable;

    foo() {
        v.resize(16);
    }
};

のサイズを のstd::vector<spatialEntry>ように 16に初期化しますv。どうやってやるの?

4

3 に答える 3

2

そのメンバーを含むクラスのコンストラクターを定義してから、次のresize()ようにします。

class foo() {
public:
   //...
   struct accumulationEntry 
   {
       uint64_t offset;
       std::vector<spatialEntry> pattern;
       accumulationEntry()
       {
            pattern.resize(16);  //<--------- this is what you want?
       }
    };
    std::vector<int> v;
    std::list< accumulationEntry > accumulationTable;
    foo()
    {
       v.resize(16);
    }
};

ただし、 を使用する場合は、次のようにすることをお勧めしますresize

       accumulationEntry() : pattern(16)  //<--- note this
       {
            //pattern.resize(16);
       }

つまり、メンバー初期化リストを使用します。も同様に行いfooます。

于 2012-12-20T19:23:21.563 に答える
1

accumulationEntryは単なるタイプです。そのタイプのオブジェクトはまだないので、std::vector<spatialEntry>サイズを変更する必要はありません。おそらく、 にaccumulationEntrys を追加することになりますaccumulationTable。あなたは次のようにそれを行うかもしれません:

accumulationTable.push_back(accumulationEntry());

それが完了したら、次vectorのように、たとえば 0 番目の要素に含まれる要素のサイズを変更できます。

accumulationTable[0].pattern.resize(16);

または、メンバーのaccumulationEntryサイズを変更するコンストラクターを提供することもできます。pattern

struct accumulationEntry {
  // ...
  accumulationEntry()
  {
    pattern.resize(16);
  }
};
于 2012-12-20T19:21:46.200 に答える
1
class foo() {
public:
 struct spatialEntry {
   bool block;
   CoherenceState_t state;
 };
 struct accumulationEntry {
 accumulationEntry()
     : pattern(16)  //  Calling pattern's c'tor
 {
 }
   uint64_t offset;
   std::vector<spatialEntry> pattern;
 };
 std::vector<int> v;
 std::list< accumulationEntry > accumulationTable;
 foo()
 {
    v.resize(16);
 }
};
于 2012-12-20T19:26:38.387 に答える