当我试图动态创建(boost)位集的2d向量时,我似乎迷路了。
我的代码:
class Configuration
{
vector< vector<dynamic_bitset<> > > configset;
Configuration(unsigned groups, unsigned players, unsigned weeks){
//allocation on heap, this works
vector< vector<dynamic_bitset<> > > configset(weeks, vector<dynamic_bitset<> >(groups, dynamic_bitset<>(players)));
//this does not work, how to create this dynamically, with new?
configset = new vector< vector<dynamic_bitset<> > > (weeks, new vector<dynamic_bitset<> >(groups, new dynamic_bitset<>(players)));
}
};
如何使用new运算符初始化属性configset?谢谢
因此,configset被分配为Configuration
类的一部分。它将在内部调整大小以适应您想要的内容,但当配置被销毁时,它将被销毁。应该工作得很好,除非你真的需要一个指针。如果这对您有效,只需将分配替换为对resize
的调用,使其成为您需要的任何形状(如下图所示:configset.resize(weeks, vector<dynamic_bitset>(groups, dynamic_bitset(players)))
)。这在大多数情况下都应该很好。
如果你想显式地分配它,你需要存储一个指针。定义如下配置集:
vector< vector<dynamic_bitset<> > > *configset;
而且您的大部分代码都能正常工作。确保在析构函数中删除它。
更好的方法是使用unique_ptr(或其他智能指针),如下所示:
unique_ptr<vector<vector<dynamic_bitset<>>>> configset;
....
configset.reset(new vector....);
这样它是动态分配的,你可以把它当作一个指针,但你不会忘记删除它
如果您需要始终动态分配内部结构,那么也需要将其应用于内部结构。那是
vector<vector<dynamic_bitset<>*>*>* configset;
or
unique_ptr<vector<unique_ptr<vector<unique_ptr<dynamic_bitset<>>>>>> configset;
最后,您的分配只创建一个dynamic_bitset<>
和一个vector<dynamic_bitset<>>
,并将指针复制到所有位置。这可能不是你想要的。要么删除指针(这不是java),要么有一个循环来正确初始化它。