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

What are different ways of initializing the size of an array with user input in c++

本文关键字:方法 数组 c++ 用户 初始化 输入      更新时间:2023-10-16

我想知道在 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);

顺便说一句:VLA不受C++标准支持。另请参阅C++编译器中的可变长度数组 (VLA<</p>

div class="answers>

一种方法是:

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 的普通分配(尽管不建议使用后者(。