【发布时间】:2017-11-04 00:17:53
【问题描述】:
我很难找到以下问题的答案:
在 c++14 中分配在内存中连续的整数的二维数组的最佳实践方法是什么。
条件:
- 宽度和高度在编译时是已知的,但出于各种原因,我仍想将二维数组放在堆上。
- 我想使用二维语法 arr[x][y] 访问内存位置
- 如果可能,我不想实现自己的包装器
子问题:
- 我必须使用 std::array 还是原生 int[][dim] 语法可用?
- 二维数组可以有一个 unique_ptr 吗?
提前感谢您的回答。
【问题讨论】:
-
std::vector<std::vector<int>> vec(n, std::vector<int>(m));如果在编译时知道大小,请不要使用动态内存。 -
@DeiDei 这不会是连续的,而且效率会很低。至于你的第二句话,那就错了。
-
auto &arr = *new std::array<std::array<TYPE, height>, width>?还是std::vector<std::array<TYPE, height>> arr(width);? -
@DeiDei 你建议使用
std::vector,你建议不要使用std::vector? -
使用
std::vector<int>并计算每次访问的偏移量。删除需求三并调整需求二,以便包装类的语法变为arr(x, y)。