例如:
int size;
cout << "Enter array size" <<endl;
cin >> size;
int myarray[size];
我希望用户能够输入数组的大小,但我不断收到一条错误消息,说我没有使用常量变量。当我搜索这个问题的答案时,我会得到有关如何将变量存储在数组中的信息(而不是我正在寻找的)。
答案 0 :(得分:4)
Variable length arrays不是 C ++ 标准的一部分,尽管它们是 C99 标准的一部分,并且有几个编译器支持它们作为的扩展C ++ 包括gcc和clang,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
样式类,有可能进行自动存储优化。这些都不是解决问题所必需的。