我想用一个用户定义的大小来初始化一个数组,但是知道的是 - 我要声明一个最大大小的数组,然后处理用户在这个过程中给出的大量内存浪费的元素数量。有没有办法声明用户给出的大小数组。 我做了这个,但编译器显示错误。
int a=0;
std::cout<<"Enter size of array";
std::cin>>a;
const int b=a;
int ary[b];
我使用的是Turbo C ++ IDE
答案 0 :(得分:2)
您的代码的问题在于您声明所谓的变量长度数组,它不是C ++的一部分(尽管它是有效的C代码)。有关原因的解释,请参阅this。
你可以通过几种不同的方式实现你想要做的事情:
您可以使用用户提供的大小动态分配数组:
#include <iostream>
#include <memory>
int main(int argc, char** argv)
{
std::size_t a =0;
std::cout<<"Enter size of array";
std::cin>>a;
std::unique_ptr<int[]> arr(new int[a]);
//do something with arr
//the unique ptr will delete the memory when it goes out of scope
}
这种方法可行,但可能并不总是理想的,特别是在阵列大小可能需要经常更改的情况下。在这种情况下,我建议使用std::vector
:
#include <iostream>
#include <vector>
int main(int argc, char** argv)
{
std::size_t a =0;
std::cout<<"Enter size of array";
std::cin>>a;
std::vector<int> arr(a);//arr will have a starting size of a
//use arr for something
//all of the memory is managed internally by the vector
}
您可以找到参考页面here。
答案 1 :(得分:1)
您可以在声明动态数组时使用 new 关键字
int main()
{
int array_size;
std::cin >> array_size;
int *my_array = new int[array_size];
delete [] my_array;
return 0;
}
您应删除使用新分配的数组。
您还可以使用向量在c ++中动态分配内存。有关向量
的示例,请阅读here