使用c+;中的用户输入初始化数组大小的不同方式有哪些+; 我想知道在C++中做以下代码片段的替代方案是什么?p> inti; cin>>i; int-arr[i];

使用c+;中的用户输入初始化数组大小的不同方式有哪些+; 我想知道在C++中做以下代码片段的替代方案是什么?p> inti; cin>>i; int-arr[i];,c++,arrays,c++11,gcc,stl,C++,Arrays,C++11,Gcc,Stl,我最近开始研究竞争性编程,并试图了解更多 编辑:对于那些关于这不是cpp的评论。它使用我在类中使用的makefile成功编译,该类使用的是gcc-std=c++11-o a.exe main.cpp,当我输入长度为1时返回控制台 数组长度:1 > p>您应该在C++中使用,例如 int i; cin >> i; std::vector<int> arr(i); inti; cin>>i; std::载体arr(i); BTW:不支持C++标准。另请参见一种方法是:

我最近开始研究竞争性编程,并试图了解更多

编辑:对于那些关于这不是cpp的评论。它使用我在类中使用的makefile成功编译,该类使用的是
gcc-std=c++11-o a.exe main.cpp
,当我输入长度为1时返回控制台

数组长度:1
<代码> > p>您应该在C++中使用,例如

int i;
cin >> i;
std::vector<int> arr(i);
inti;
cin>>i;
std::载体arr(i);

BTW:不支持C++标准。另请参见

一种方法是:

int i = 0;

cin >> i;

auto arr = std::make_unique<int[]>(i); // #include <memory>
        // Or: std::make_shared<int[]>(i);

<>你的代码不是C++。它使用一种C语言特性(来自C标准的C99版本),称为“可变长度数组”——堆栈上的数组可以在运行时确定长度

可变长度数组被认为是危险的,被认为是一个相当糟糕的主意;见:

如果在编译代码时告诉编译器只接受符合标准的代码,它将失败:
gcc-std=c++11-pedantic error


C++中<强>数组的大小在编译时< /强>,期间设置。与其他用户建议的一样,您可以使用动态分配在内存中获得运行时确定的长度连续区域,大小由您选择:使用

std::vector
std::unique_ptr
std::shared_ptr
甚至使用
new
的普通分配(尽管不建议使用后者).

您也可以这样使用:
int number=0;当(CIN >数字){MyValuth.PuxSuffBead(数字);} < /C> >,但是,这里,您直接指定大小。这个代码片段不是有效的C++;许多编译器允许可变长度数组作为扩展,但是在标准C++中,除非使用“代码>新[]代码/代码>来干扰动态数组,否则您需要知道编译时的大小。你在这个问题上给我们的表现不是C++,所以你可以忘记你在提问中展示给我们的方式。学习C++,然后开始竞争。如果你试图用另一种方式去做,你就处于严重的竞争劣势。在CP中,我通常将所有数组的固定大小设置为问题中指定的最大值,这应该是可以接受的答案。不知道为什么OP还没有这样做。看起来代码片段是因为我的GCC版本而不是C++的。VLAs可能错误地接受了“GCC接受他的代码,所以代码是正确的”。这就是为什么我希望GCC(和其他)。编译器会在默认情况下关闭VLA选项。许多新程序员错误地认为他们的“VLA”代码是正确的,而事实并非如此。
int i = 0;

cin >> i;

std::vector<int> arr(i); // #include <vector>