C++,如何制作长度不限于整数的数组?
目前,C++ 只允许将长度为整数的数组声明。有没有办法绕过它?我正在尝试创建一个程序来生成一个数组,该数组的长度可能会达到数千甚至数百万,具体取决于输入,但数组声明仅限于整数长度限制了我。
评论基本上,假设我想创建一个 5 行 500,000 列的二维数组,我会得到一个分段错误。
回答
的原型std::array是
template<class T, std::size_t N> struct array;
根据https://en.cppreference.com/w/cpp/types/size_t,
std::size_t可以存储理论上可能的任何类型(包括数组)对象的最大大小。大小不能由 表示的类型std::size_t是格式错误的(C++14 起)
(强调我的)
因此,根据定义,C++ 无法表达大小大于 a 的对象的概念std::size_t。
幸运的是,在大多数平台std::size_t上至少会是 32 位,这意味着它不仅可以达到数百万,而且可以达到数十亿。如果你在一个比它更小的平台上,那么你的硬件可能无论如何都无法存储更大的对象。
更新:在您添加的评论中
对不起,我应该更具体。基本上,假设我想创建一个 5 行 500,000 列的二维数组,我会遇到分段错误。
如果这里的问题是语言的限制,您将收到编译器错误,而不是运行时错误。
由于您遇到运行时错误,问题在于您的平台,而不是语言。在这种特殊情况下,“问题”在于它没有为您提供足够的堆栈空间来支持堆栈帧中的多兆字节对象。(如果您问我,这是一个非常合理的限制。)相反,您需要在堆上分配数据。
我可以给你一些代码,让你的问题暂时消失,但你真正需要做的是阅读堆栈和堆,了解它们是什么以及如何使用它们。