调整结构中的向量的大小

时间:2012-12-20 19:18:35

标签: c++ vector

我定义了两个struct s

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。我怎么能这样做?

3 个答案:

答案 0 :(得分: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也这样做。

答案 1 :(得分:1)

accumulationEntry只是一种类型。您还没有该类型的对象,因此没有std::vector<spatialEntry>可以调整大小。大概您将accumulationEntry添加到accumulationTable。你可以这样做:

accumulationTable.push_back(accumulationEntry());

完成后,您可以调整包含在第0个元素中的vector,如下所示:

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

或者,您可以为accumulationEntry提供一个构造函数,以调整其pattern成员的大小:

struct accumulationEntry {
  // ...
  accumulationEntry()
  {
    pattern.resize(16);
  }
};

答案 2 :(得分: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);
 }
};