【问题标题】:Dynamically allocationg 2D vector C++动态分配二维向量 C++
【发布时间】:2016-08-11 14:59:35
【问题描述】:

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

我的代码:

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 不是指针,因此不应使用new
  • 也不相关,但将您的构造函数公开。
  • @NathanOliver 是的:D。几年后才切换到 C++ 项目 ehh。
  • 这里不需要new
  • @user2174310 我会远离 C++ 中的new。还有一些地方你需要它,但大多数时候如果你使用new,你会做一些困难的事情。

标签: c++ vector dynamic-allocation


【解决方案1】:

因为它是 configset 作为Configuration 类的一部分分配的。它将在内部调整大小以适应您的需求,但在配置被销毁时它将被销毁。除非您真的需要指针,否则应该可以正常工作。如果这对您有用,只需将分配替换为对resize 的调用,以使其成为您需要的任何形状(例如:configset.resize(weeks, vector&lt;dynamic_bitset&gt;(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&lt;&gt; 和一个vector&lt;dynamic_bitset&lt;&gt;&gt;,并将指针复制到所有位置。这可能不是你想要的。要么删除指针(这不是 java),要么有一个循环来正确初始化它。

【讨论】:

    猜你喜欢
    • 2020-06-29
    • 2021-02-03
    • 2017-12-26
    • 2015-06-10
    • 1970-01-01
    • 2015-02-10
    • 2015-05-18
    • 2023-03-10
    • 2015-09-17
    相关资源
    最近更新 更多