gpt4 book ai didi

C++ : Creating an array with a size entered by the user

转载 作者:太空狗 更新时间:2023-10-29 19:37:52 25 4
gpt4 key购买 nike

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

例如:

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

上面的程序将无法运行,因为数组大小必须是一个编译时常量,但在我的例子中,它是一个变量。

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

最佳答案

在 C++ 中,有两种存储类型:基于的内存和基于的内存。基于堆栈的内存中对象的大小必须是静态的(即不变),因此必须在编译时已知。这意味着您可以这样做:

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++ 有许多数据结构可以为您执行此操作(即它们在幕后使用 newdelete 来动态更改对象的大小)。

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

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

并且不必担心 newdelete。它变得更好,因为 std::vector 会在您添加更多元素时自动调整自身大小。

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

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

关于C++ : Creating an array with a size entered by the user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28625465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com