gpt4 book ai didi

c++ - 动态分配二维 vector C++

转载 作者:行者123 更新时间:2023-11-28 00:04:08 26 4
gpt4 key购买 nike

当我尝试动态创建(提升)位集的二维 vector 时,我似乎迷路了。

我的代码:

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

关于c++ - 动态分配二维 vector C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36718268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com