C ++中的动态长度数组

时间:2019-10-25 10:58:53

标签: 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可以处理第一个问题,但是我认为在创建多维数组时仍然必须手动调整向量的大小。由于我在创建后不需要调整长度,因此它看起来也像是一个矫kill过正。

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

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

那么有一个好的解决方案吗?最好不要使用自写的包装器模板,但是如果没有更好的解决方案,那就还是可以接受的。

1 个答案:

答案 0 :(得分:2)

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

这将创建一个尺寸为depth * depth的二维矢量,其初始值为initialValue