在C ++中用用户输入初始化数组大小的不同方法是什么

时间:2019-04-07 04:10:36

标签: c++ arrays c++11 gcc stl

我想知道在c ++中执行以下代码段的替代方法是什么?

int i;
cin >> i;
int arr[i];

我最近开始研究竞争性程序设计并尝试了解更多信息。

编辑:对于那些不是cpp的评论。使用我在我的班级中使用gcc -std=c++11 -o a.exe main.cpp的makefile可以成功编译该文件,并在输入长度1时返回控制台。

array length: 1

3 个答案:

答案 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-errorTry it on GodBolt

在C ++中,数组的大小是在编译时期间设置的。像其他用户建议的那样,您可以使用动态分配来获取内存中运行时确定长度的连续区域,并选择大小:使用std::vectorstd::unique_ptrstd::shared_ptr或甚至使用new进行普通分配(尽管不建议使用后者)。