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

时间:2015-02-20 09:23:05

标签: c++ arrays

与许多SO用户相比,我对C ++相对较新。

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

例如:

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

但是上面的程序不会工作,因为数组大小必须是常量,但就我而言,它是一个变量。

那么可以将变量变成常量并将其指定为数组的大小吗?

寻找一个简单易懂的答案,感谢您的时间和精力:)

3 个答案:

答案 0 :(得分:7)

在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是这些自我管理数据结构的一个示例,它是数组的直接替代品。这意味着你可以这样做:

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

答案 1 :(得分:3)

使用std::vector(需要标题<vector>):

int size;
cout<<"Enter desired size of the array";
cin >> size;
std::vector<int> array(size);

答案 2 :(得分:3)

使用动态分配

More on dynamic memory in 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

More on vectors

#include <iostream>
#include <vector>

int main() {
    int size;
    std::cout <<"Enter desired size of the array";
    std::cin >> size;
    std::vector<int> array(size);
}