gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 16:03:45 25 4
gpt4 key购买 nike

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

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/

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