C++:使用用户输入的大小创建数组
C++ : Creating an array with a size entered by the user
我想知道我们是否可以制作一个由用户指定大小的数组。
例如:
int a;
cout<<"Enter desired size of the array";
cin>>a;
int array[a];
上面的程序无法工作,因为数组大小必须是编译时常数,但在我的情况下,它是一个变量。
有没有可能把一个变量变成一个常量,并把它赋值为数组的大小?
在C++中,有两种类型的存储:基于堆栈的内存和基于heap的内存。基于堆栈的内存中对象的大小必须是静态的(即不更改),因此在编译时必须知道。。这意味着你可以这样做:
int array[10]; // fine, size of array known to be 10 at compile time
但不是这个:
int size;
// set size at runtime
int array[size]; // error, what is the size of array?
请注意,常量值和编译时已知的值之间存在差异,这意味着您甚至不能这样做:
int i;
// set i at runtime
const int size = i;
int array[size]; // error, size not known at compile time
若您想要一个动态大小的对象,您可以使用某种形式的new
操作符来访问基于堆的内存:
int size;
// set size at runtime
int* array = new int[size] // fine, size of array can be determined at runtime
但是,不建议使用new
的这种"原始"用法,因为您必须使用delete
来恢复分配的内存。
delete[] array;
这是一种痛苦,因为你必须记住delete
你用new
创建的一切(并且只有delete
一次)。幸运的是,C++有许多数据结构可以为您做到这一点(即,它们在后台使用new
和delete
来动态更改对象的大小)。
std::vector
是这些自管理数据结构的一个示例,是阵列的直接替代品。这意味着你可以这样做:
int size;
// set size at runtime
std::vector<int> vec(size); // fine, size of vector can be set at runtime
并且不必担心CCD_ 10或CCD_。它会变得更好,因为std::vector
会在添加更多元素时自动调整自身大小。
vec.push_back(0); // fine, std::vector will request more memory if needed
总之:除非在编译时知道数组的大小,否则不要使用数组(在这种情况下,不要使用new
),而是使用std::vector
。
使用std::vector
(需要标头<vector>
):
int size;
cout<<"Enter desired size of the array";
cin >> size;
std::vector<int> array(size);
使用动态分配
关于C++中动态内存的更多信息
#include <iostream>
int main() {
int size;
std::cout <<"Enter desired size of the array";
std::cin >> size;
int *array = new int[size];
}
如上文链接文章所述:
在大多数情况下,只有在程序中的特定时间段内才需要动态分配的内存;一旦不再需要它,就可以释放它,这样内存就可以再次用于动态内存的其他请求。这就是操作员删除的目的。
当你完成array
时,你应该使用以下语法删除它:
delete[] array;
使用std::vector
更多关于矢量
#include <iostream>
#include <vector>
int main() {
int size;
std::cout <<"Enter desired size of the array";
std::cin >> size;
std::vector<int> array(size);
}
- 在将 new 与指针一起使用时,创建数组的指定长度
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 合并排序不排序自创建数组类 c++
- 基于参数创建数组
- 使用new创建数组而不声明大小
- c++用输入数据创建数组
- 从类 c++ 动态创建数组
- 如何使用 void 函数从类创建数组
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 如何在不知道Arduino中知道其大小的情况下创建数组和存储值
- 使用动态分配创建数组并将元素插入其中
- 是否可以使用C 函数中的const int参数创建数组
- 如何在C++函数中创建数组
- 使用 ::std::vector 创建数组
- 在编译时以增量方式创建数组
- Numpy C API - 使用 PyArray_Descr 创建数组会导致段错误
- 为什么当我尝试在类中创建数组时"invalid use of non-static data member"我会收到错误?
- 取消引用指针以创建数组的副本
- C++ 在堆上创建数组而不对其进行初始化
- 数组的维度是在创建数组的那一刻确定的,以后不能更改的,这是真的吗?