用户定义的数组大小

时间:2017-03-04 05:47:52

标签: c++ arrays

我想用一个用户定义的大小来初始化一个数组,但是知道的是 - 我要声明一个最大大小的数组,然后处理用户在这个过程中给出的大量内存浪费的元素数量。有没有办法声明用户给出的大小数组。 我做了这个,但编译器显示错误。

int a=0;
std::cout<<"Enter size of array";
std::cin>>a;
const int b=a;
int ary[b];

我使用的是Turbo C ++ IDE

2 个答案:

答案 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