C++ 调整结构中向量的大小

C++ 调整结构中向量的大小,c++,vector,C++,Vector,我定义了两个structs class foo() { public: struct spatialEntry { bool block; CoherenceState_t state; }; struct accumulationEntry { uint64_t offset; std::vector<spatialEntry> pattern; }; std::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);
    }
};
class foo(){
公众:
结构空间测量{
布尔块;
相干状态;
};
结构累加熵{
uint64_t偏移量;
std::矢量模式;
};
std::向量v;
std::列表累加表;
foo(){
v、 调整大小(16);
}
};

现在我想将std::vector的大小初始化为16,就像
v
一样。我怎样才能做到这一点呢?

AccumerationEntry
只是一种类型。您还没有该类型的对象,因此没有要调整大小的
std::vector
。您可能会将
acculationentry
s添加到
acculationtable
中。您可以这样做:

accumulationTable.push_back(accumulationEntry());
完成此操作后,可以调整包含在例如第0个元素中的
向量的大小,如下所示:

accumulationTable[0].pattern.resize(16);
或者,您可以为
AccumerationEntry
提供一个构造函数,用于调整其
模式
成员的大小:

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

AccumerationEntry
只是一种类型。您还没有该类型的对象,因此没有要调整大小的
std::vector
。您可能会将
acculationentry
s添加到
acculationtable
中。您可以这样做:

accumulationTable.push_back(accumulationEntry());
完成此操作后,可以调整包含在例如第0个元素中的
向量的大小,如下所示:

accumulationTable[0].pattern.resize(16);
或者,您可以为
AccumerationEntry
提供一个构造函数,用于调整其
模式
成员的大小:

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

只需为包含该成员的类定义构造函数,然后将
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);
    }
};

也就是说,使用成员初始化列表。对
foo
也执行同样的操作。

只需为包含该成员的类定义一个构造函数,然后将
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);
    }
};
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);
 }
};
也就是说,使用成员初始化列表。对
foo
也执行同样的操作。

class foo(){
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);
 }
};
公众: 结构空间测量{ 布尔块; 相干状态; }; 结构累加熵{ 累加熵() :pattern(16)//调用模式的命令 { } uint64_t偏移量; std::矢量模式; }; std::向量v; 标准::列表<累计输入>累计表; foo() { v、 调整大小(16); } };
class foo(){
公众:
结构空间测量{
布尔块;
相干状态;
};
结构累加熵{
累加熵()
:pattern(16)//调用模式的命令
{
}
uint64_t偏移量;
std::矢量模式;
};
std::向量v;
标准::列表<累计输入>累计表;
foo()
{
v、 调整大小(16);
}
};

所以我必须这样做,以便每一件物品我都推回。对吗?@mahmood如果你给
AccumerationEntry
一个构造函数来调整
的大小
,那么你就不必手动操作了。所以我必须让每一项都返回。对吗?@mahmood如果你给
AccumerationEntry
一个构造函数来调整
大小
,那么你就不必手动操作了。