动态分配2D矢量C++



当我试图动态创建(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),要么有一个循环来正确初始化它。

最新更新