如何制作一个变量大小的数组?

时间:2013-12-30 19:51:21

标签: c++ arrays variables input size

例如:

int size;
cout << "Enter array size" <<endl;
cin >> size;
int myarray[size];

我希望用户能够输入数组的大小,但我不断收到一条错误消息,说我没有使用常量变量。当我搜索这个问题的答案时,我会得到有关如何将变量存储在数组中的信息(而不是我正在寻找的)。

3 个答案:

答案 0 :(得分:4)

Variable length arrays不是 C ++ 标准的一部分,尽管它们是 C99 标准的一部分,并且有几个编译器支持它们作为的扩展C ++ 包括gccclang,Visual Studio是notable exceptions之一。

显而易见的 C ++ 解决方案是使用std::vector或可能new,但这意味着你必须担心删除内存。

答案 1 :(得分:3)

在C ++中,您可以简单地使用 std::vector ,在您的情况下使用std::vector<int>

然后,您需要包含<vector>标题。

using std::vector;
int size;
cout << "Enter array size ";
cin >> size;
vector<int> myarray(size);

std::vector负责为您管理内存,它还有一个方便的 push_back 方法,可以在最后添加项目,并根据需要扩展数组。

这意味着您不必在特定尺寸上预先决定,但只需添加更多项目。

答案 2 :(得分:2)

在C ++ 03和C ++ 11中处理此问题的正确方法是使用托管动态数组类型,例如std::vector

int size;
std::cout << "Enter array size" << std::endl;
std::cin >> size;
std::vector<int> myarray;
myarray.resize(size);

std::vector<int>的行为很像int的原始数组。作为示例,您可以使用[3]来访问元素。

这优于自己管理内存,因为有经验的程序员会忘记内存。

有建议将动态大小的数组添加到C ++ 1y(C ++的下一次迭代)或稍后的扩展中,其方式与C99有些兼容(重要区别在于C99中的sizeof(variable length array)是运行时评估的,但不是C ++中的。还有一些建议要添加std::dynarray,这是一个稍微不那么重量级的std::vector样式类,有可能进行自动存储优化。这些都不是解决问题所必需的。