在 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);
顺便说一句:VLA不受C++标准支持。另请参阅C++编译器中的可变长度数组 (VLA<</p>
一种方法是:
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::vector
、 std::unique_ptr
、std::shared_ptr
甚至带有 new
的普通分配(尽管不建议使用后者(。
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 复制几乎为空的数组的最快方法
- 通过JNI传递数据数组的最快方法是什么
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 数组元素打印的递归方法
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- C++数组队列实现方法错误
- 寻找一种更好的方法来表示无符号字符数组
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 创建异构顶点数据数组的可移植方法
- 打印字符数组地址的正确方法
- 还有其他方法可以在数组中写入多维数组吗?
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 从非类型模板参数声明 constexpr 数组的可移植方法
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案