C++:使用用户输入的大小创建数组

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

本文关键字:创建 数组 输入 用户 C++      更新时间:2023-10-16

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

例如:

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++有许多数据结构可以为您做到这一点(即,它们在后台使用newdelete来动态更改对象的大小)。

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);
}