<分区>
编辑:
严格来说这不是另一个问题的重复,但那里接受的答案可以用来解决我的问题。
我想使用一个长度由变量指定的数组 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
这可以处理第一个问题,但我认为在创建多维数组时我仍然需要手动调整 vector 的大小。这看起来也有点矫枉过正,因为我不需要在创建后调整长度。
此外,我尝试了 std::array
并发现它不接受可变长度。
我想要的可能是一个混合体,类似于 myarray<class T, size_t N>
它动态分配内存但只有一次。然后我可以使用 myarray<myarray<T, m>, n>
创建多维数组。
那么有什么好的解决办法吗?最好不要用自己写的wrapper template,但是如果没有更好的方案也可以接受。