我想知道在c ++中执行以下代码段的替代方法是什么?
int i;
cin >> i;
int arr[i];
我最近开始研究竞争性程序设计并尝试了解更多信息。
编辑:对于那些不是cpp的评论。使用我在我的班级中使用gcc -std=c++11 -o a.exe main.cpp
的makefile可以成功编译该文件,并在输入长度1时返回控制台。
array length: 1
答案 0 :(得分:11)
例如,在C ++中应使用std::vector
,例如
int i;
cin >> i;
std::vector<int> arr(i);
顺便说一句:C ++标准不支持VLA。另请参见Variable Length Array (VLA) in C++ compilers
答案 1 :(得分:3)
一种方法是:
SampleClass:
properties:
dateOfBirth:
type: string
format: date-time .
另一种方法是使用int i = 0;
cin >> i;
auto arr = std::make_unique<int[]>(i); // #include <memory>
// Or: std::make_shared<int[]>(i);
:
std::vector
答案 2 :(得分:1)
您的代码不是C ++。它使用C语言功能(来自C标准的C99版本)称为“可变长度数组”-堆栈中的数组可以在运行时确定其长度。
可变长度数组被认为是危险的,并且被认为是一个很糟糕的主意。看到:
Why aren't variable-length arrays part of the C++ standard?
如果在告诉编译器仅接受符合标准的代码时编译了代码,则它将失败:gcc -std=c++11 -pedantic-error
。 Try it on GodBolt。
在C ++中,数组的大小是在编译时期间设置的。像其他用户建议的那样,您可以使用动态分配来获取内存中运行时确定长度的连续区域,并选择大小:使用std::vector
,std::unique_ptr
,std::shared_ptr
或甚至使用new
进行普通分配(尽管不建议使用后者)。