c++ - 将 std::vector 用于动态分配的二维数组?

标签 c++ arrays stdvector

所以我正在写一个类,它有一个一维数组和一个二维数组,我在构造函数中动态分配

class Foo{
int** 2darray;
int * 1darray;
};

Foo::Foo(num1, num2){

2darray = new int*[num1];
for(int i = 0; i < num1; i++)
{     
    array[i] = new int[num2]; 
}
1darray = new int[num1];
}

然后我将不得不在析构函数中删除每个一维数组和二维数组中的每个数组,对吗? 我想使用 std::vector 不必这样做。这样做有什么缺点吗? (使编译变慢等?)

TL;DR:何时将 std::vector 用于动态分配的数组,这些数组不需要在运行时调整大小?

最佳答案

vector 适用于绝大多数用途。手动调整方案应首先尝试调整分配器1,然后才修改容器。内存管理(以及您的程序)的正确性比任何编译时间的增加都更有值(value)。

换句话说,vector 应该是您的起点,您发现它不满意之前,您不应该关心其他任何事情。

作为额外的改进,考虑使用一维vector 作为后端存储,并且只提供二维索引 View 。这种情况可以提高缓存的局部性和整体性能,同时也使复制整个结构等一些操作变得更加容易。


1 vector 接受的两个模板参数中的第二个,默认为给定类型的标准分配器。

关于c++ - 将 std::vector 用于动态分配的二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39080189/

相关文章:

c++ - 使 std::vector 分配对齐内存的现代方法

c++ - 将 std::lower_bound 与 std::vector::const_iterator 一起使用

c++ - 如何从源代码构建glibcxx 3.4.21?

c++ - map<int,vector<int>> 的算法

javascript - js-正则匹配数组和字符串

c - ANSI C - 二维数组

javascript - json如何将行转换为列

c++ - 错误 : expected ‘,’ or ‘...’ before ‘for’ in #define

python - pyLCIO setMomentum : error const float* in python

c++ - std::vector insert() 重新分配