[英]What are different ways of initializing the size of an array with user input in c++
我想知道在c ++中执行以下代码片段有哪些替代方法。
int i;
cin >> i;
int arr[i];
我最近开始研究竞争性编程并尝试了解更多信息。
编辑:对于那些不是cpp的评论。 它使用我在我的类中使用的makefile成功编译,该类使用gcc -std=c++11 -o a.exe main.cpp
并在输入长度为1时返回控制台
array length: 1
你应该在C ++中使用std::vector
,例如
int i;
cin >> i;
std::vector<int> arr(i);
BTW:C ++标准不支持VLA 。 另请参阅C ++编译器中的可变长度数组(VLA)
一种方法是:
int i = 0;
cin >> i;
auto arr = std::make_unique<int[]>(i); // #include <memory>
// Or: std::make_shared<int[]>(i);
另一种方法是使用std::vector
:
int i = 0;
cin >> i;
std::vector<int> arr(i); // #include <vector>
您的代码不是C ++。 它使用C语言特性(来自C标准的C99版本)称为“可变长度数组” - 其中堆栈上的数组可以具有在运行时确定的长度。
可变长度阵列被认为是危险的,被认为是一个相当糟糕的想法; 看到:
如果编译代码同时告诉编译器只接受符合标准的代码,它将失败: gcc -std=c++11 -pedantic-error
。 在GodBolt上尝试一下 。
在C ++ 中,数组的大小是在编译时设置的 。 与其他用户建议的一样,您可以使用动态分配来获取内存中运行时确定长度的连续区域,您可以选择大小:使用std::vector
, std::unique_ptr
, std::shared_ptr
甚至是普通分配new
(虽然后者不推荐)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.