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<class T, size_t N>
,它动态分配内存但只分配一次。然后我可以使用myarray<myarray<T, m>, n>
创建多维数组。
那么有没有好的解决方案呢?最好不要用自己写的包装模板,但如果没有更好的解决方案还是可以接受的。
【问题讨论】:
你想要 std::vector @AndyG 但是你能指定我如何使用它来避免手动调整大小吗?也许是二维数组的一个简短示例。谢谢! vectortemplate<unsigned w, unsigned h, typename T> class mymatrix
代码,这将代表一些 std::vector
中的内部数据
@RobertEngel 我明白了!这个构造函数解决了这个问题。如果您将其发布为答案,我很乐意接受。
【参考方案1】:
vector<vector<unsigned>> myvec(depth, vector<unsigned>(depth, initialValue));
这将创建一个大小为 depth*depth 的二维向量,初始值为 initialValue
【讨论】:
以上是关于C ++中的动态长度数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章
产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。