动态分配2D矢量C ++

时间:2016-04-19 12:22:39

标签: c++ vector dynamic-allocation

当我尝试动态创建(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)));
    }
};

如何使用运算符初始化属性 configset ?感谢。

1 个答案:

答案 0 :(得分:3)

因为它是configset被分配为Configuration类的一部分。它将在内部调整大小以适合您的需要,但在销毁配置时它将被销毁。应该工作得很好,除非你真的需要一个指针。如果这适用于您,只需使用resize调用替换分配,使其成为您需要的任何形状(例如:configset.resize(weeks, vector<dynamic_bitset>(groups, dynamic_bitset(players))))。在大多数情况下,这应该可以正常工作。

如果要显式分配它,则需要存储指针。像这样定义configset:

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)或者有一个循环来正确初始化它。