是否有VSA(可变长度阵列)支持VS2017的解决方法?

Duc*_*een -1 c++ arrays vector variable-length-array visual-studio-2017

如此简单的代码如:

int n;
cin >> n;
int s[n], p[2*(n-1)][3];
Run Code Online (Sandbox Code Playgroud)

我必须翻译成:

int  n;
cin >> n;
vector<int> s(n, 0);
vector<vector<int>> p(2 * (n - 1), vector<int>(3));
Run Code Online (Sandbox Code Playgroud)

我希望看到类似的东西:

int  n;
cin >> n;
mat s(n), p(2*(n-1), 3);
Run Code Online (Sandbox Code Playgroud)

我绝对不想使用new\make_uniquestd::array+ std::vector混合这样简单的东西.两条线是一个丑陋的混乱恕我直言,所以我希望有一种方法来保持C像sintax.

那么什么是变通方法?任何定义/标准头/ copy -matable基于STL的C++类型?

Bat*_*eba 7

标准C++不支持可变长度数组.

std::vector<int>是实现连续int数据块的惯用方法,其大小在编译时是未知的.一个好的经验法则是使用,std::vector直到找到令人信服的理由不这样做.


Ste*_*ner 5

标准 C++ 不支持变长数组(即至少一维不是编译时常量的数组)。因此,你不能写类似的东西cin >> n; int s[n]。存在一些扩展,但是对于非常大的值n,如果编译器将这样的数组放在“堆栈”上,您可能会遇到麻烦,“堆栈”通常比堆更受限制。

标准方法是使用std::vector<int> s(n)or ,如果 - 虽然通常不推荐 - 由于某种原因你想要一个不被对象包装的“普通”数组,你可以写int *s = new int[n];,尽管delete[] s;当你不再需要该数组时你有责任调用。