动态分配二维向量 C++

Dynamically allocationg 2D vector C++

当我尝试动态创建 (boost) 位集的二维向量时,我似乎迷路了。

我的代码:

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 class 的一部分分配的。它会在内部调整大小以适应你想要的,但当 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),要么有一个循环来正确初始化它。