我正在尝试按如下方式初始化一个向量:
vector<int> vect(n, 2);
此语句初始化vect
以包含n
个int
个元素,其值为2
。 n
是size_t
类型的变量,已经过检查以确保n <= vect.max_size()
始终为真。
我目前正在Code :: Blocks上测试我的代码。它适用于n
的任意小值,但当我尝试在n = vect.max_size()
的IDE中运行它时,程序终止,说发生了未知的应用程序错误,并与开发人员交谈(我)。
有谁知道出了什么问题?这不是在运行时将矢量初始化为最大尺寸的正确方法吗?我查了一下,我的数学是正确的,n
没有超过vect.max_size()
答案 0 :(得分:2)
max_size()
成员在某种程度上是理论限制。在具有大量内存的机器上,可以创建具有相应大小的容器,但通常使用现代技术是不可能的。
max_size()
存在的原因在历史的迷雾中几乎消失了。我怀疑当开发STL并且使用“小”指针(类似__small int*
)实例化容器时,该值是有意义的:在那个时候,某些平台有指针类型不同大小的,例如,16位“小”和32位“大”指针。
我认为没有一种实用的方法来确定可以分配的容器的最大大小。最好的情况是,您可以执行类似二进制搜索的操作,尝试创建具有一定大小的容器并捕获std::bad_alloc
:很可能是您的“应用程序错误”和未被捕获的异常类型。