调整结构中的向量的大小

resizing a vector which is in a struct

本文关键字:向量 调整结构      更新时间:2023-10-16

我定义了两个struct

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);
}
};

现在我想像v一样将std::vector<spatialEntry>的大小初始化为 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);
}
};

但是如果你使用resize,那么最好这样做:

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

即,使用成员初始化列表。也对foo做同样的事情。

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

accumulationTable.push_back(accumulationEntry());

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

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

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

struct accumulationEntry {
// ...
accumulationEntry()
{
pattern.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);
}
};