编辑:
严格来说,它不是另一个问题的重复,但是那里的公认答案可以用来解决我的问题。
我想使用具有由变量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
可以处理第一个问题,但是我认为在创建多维数组时仍然必须手动调整向量的大小。由于我在创建后不需要调整长度,因此它看起来也像是一个矫kill过正。
此外,我尝试了std::array
,发现它不接受可变长度。
我想要的可能是混合动力,例如myarray<class T, size_t N>
,它可以动态分配内存,但只能分配一次。然后,我可以使用myarray<myarray<T, m>, n>
创建多维数组。
那么有一个好的解决方案吗?最好不要使用自写的包装器模板,但是如果没有更好的解决方案,那就还是可以接受的。
答案 0 :(得分:2)
vector<vector<unsigned>> myvec(depth, vector<unsigned>(depth, initialValue));
这将创建一个尺寸为depth * depth的二维矢量,其初始值为initialValue