c++ - C++中的动态长度数组

标签 c++ arrays

<分区>

编辑:

严格来说这不是另一个问题的重复,但那里接受的答案可以用来解决我的问题。


我想使用一个长度由变量指定的数组 n ,但一旦创建,长度将永远不会改变。

换句话说,像

cin >> n;
int* a = new int[n];

正是我想要的。但是使用 new有点不方便,主要有两个原因:

  1. 我必须记住 delete[]最后,可能会泄漏内存并且代码会变长;
  2. 说到多维数组,new过程变得相当复杂。对于二维,它看起来像

    cin >> m >> n;
    int** a = new int[m];
    for (int i = 0; i < m; i++)
        a[i] = new int[n];
    

    在更高的维度上甚至更糟。

我知道有 std::vector这可以处理第一个问题,但我认为在创建多维数组时我仍然需要手动调整 vector 的大小。这看起来也有点矫枉过正,因为我不需要在创建后调整长度。

此外,我尝试了 std::array并发现它不接受可变长度。

我想要的可能是一个混合体,类似于 myarray<class T, size_t N>它动态分配内存但只有一次。然后我可以使用 myarray<myarray<T, m>, n>创建多维数组。

那么有什么好的解决办法吗?最好不要用自己写的wrapper template,但是如果没有更好的方案也可以接受。

最佳答案

vector<vector<unsigned>> myvec(depth, vector<unsigned>(depth, initialValue));

这将创建一个大小为 depth*depth 的二维 vector ,初始值为 initialValue

关于c++ - C++中的动态长度数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58557250/

相关文章:

c++ - 检查某个位置的元素是否存在(设置)在 STL vector 中

javascript - React,在添加新项目时更新数组总计数状态

php - 如何使用 PHP 从 MySQL 数据库生成整个数据库表的 JSON 数组

c++ - 与C++中的对象数组混淆

c++ - 无法与 libiberty 链接

c++ - 如何使用CImg库捕获和处理图像的每一帧?

c++ - OpenAL - 确定最大来源

c++ - 模式功能: How does it work?

arrays - 按包含字符串的列之一对 Julia 1.1 矩阵进行排序

c# - 二维数组中选定元素的总和(盒子形状?)