繁体   English   中英

在c ++中用用户输入初始化数组大小的不同方法有哪些

[英]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版本)称为“可变长度数组” - 其中堆栈上的数组可以具有在运行时确定的长度。

可变长度阵列被认为是危险的,被认为是一个相当糟糕的想法; 看到:

为什么变长数组不是C ++标准的一部分?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM