我定义了两个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
。我怎么能这样做?
答案 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);
}
};