C ++中的动态长度数组[重复]

Posted

技术标签:

【中文标题】C ++中的动态长度数组[重复]【英文标题】:Array of dynamic length in C++ [duplicate] 【发布时间】:2019-10-25 10:58:53 【问题描述】:

编辑:

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


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

换句话说,类似

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

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

    最后一定要记得delete[],可能内存泄漏,代码变长;

    当涉及到多维数组时,new 过程变得相当复杂。对于二维,它看起来像

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

    在更高维度上甚至更糟。

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

另外,我试过std::array,发现它不接受可变长度。

我想要的可能是一个混合体,比如myarray&lt;class T, size_t N&gt;,它动态分配内存但只分配一次。然后我可以使用myarray&lt;myarray&lt;T, m&gt;, n&gt; 创建多维数组。

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

【问题讨论】:

你想要 std::vector @AndyG 但是你能指定我如何使用它来避免手动调整大小吗?也许是二维数组的一个简短示例。谢谢! vector> myvec(depth, vector(depth,initialValue)); 考虑使用Boost 或POCO 框架库。你会找到接近你需要的东西。或者编写您自己的 template&lt;unsigned w, unsigned h, typename T&gt; class mymatrix 代码,这将代表一些 std::vector 中的内部数据 @RobertEngel 我明白了!这个构造函数解决了这个问题。如果您将其发布为答案,我很乐意接受。 【参考方案1】:
vector<vector<unsigned>> myvec(depth, vector<unsigned>(depth, initialValue));

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

【讨论】:

以上是关于C ++中的动态长度数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

数组如何绕过其声明的长度[重复]

产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

C 和 C++ 中的可变长度数组 (VLA)

为啥 C 中的文字字符串分配不可能用于指定长度的数组? [复制]

如何从多个数组中复制不重复的元素

C之动态内存分配(三十四)