C++:创建一个由用户输入大小的数组

2024-05-08

我想知道我们是否可以创建一个具有用户指定大小的数组。

Ex:

int a;
cout<<"Enter desired size of the array";
cin>>a;
int array[a];

上面的程序将不起作用,因为数组大小必须是编译时常数但就我而言,它是一个变量。

是否可以将变量变成常量并将其指定为数组的大小?


在C++中,有两种类型的存储:stack基于记忆,和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?

请注意,a 之间存在差异constant价值和价值编译时已知,这意味着你甚至不能这样做:

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 is 不建议因为你必须使用delete恢复分配的内存。

delete[] array;

这是一个痛苦,因为你必须记住delete你所创造的一切new(并且仅delete一次)。幸运的是,C++ 有许多数据结构可以为您执行此操作(即,它们使用new and delete在幕后动态改变对象的大小)。

std::vector是这些自我管理数据结构的一个示例,并且是数组的直接替代品。这意味着你可以这样做:

int size;
// set size at runtime
std::vector<int> vec(size); // fine, size of vector can be set at runtime

不用担心new or delete。它变得更好,因为std::vector will 自动地添加更多元素时会调整自身大小。

vec.push_back(0); // fine, std::vector will request more memory if needed

总之:不要使用数组,除非您在编译时知道大小(在这种情况下,不要使用new),而是使用std::vector.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:创建一个由用户输入大小的数组 的相关文章

随机推荐