【发布时间】:2015-12-11 10:37:03
【问题描述】:
我正在尝试如下初始化向量:
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()
【问题讨论】:
-
如果你尝试
vect.max_size() - 10会发生什么?它可能有助于阐明这个问题。 -
你有 17 GB 的内存吗?
-
当您创建一个指定大小的向量类型变量时,所有内存将立即分配... max_size() 函数返回给您这个向量可以有多大,而不管您当前的内存大小。 ..所以目前您在堆上分配 GB 的内存,而您只是用完了资源...
-
如果超过
max_size(),分配将总是失败。如果您低于max_size(),有时分配可能会起作用。它工作的几率越大,你得到的越远,你之前完成的其他分配就越少。所以,不是一个非常有用的功能...... -
有没有一种好方法可以确定 n 的最大运行时间是多少,或者至少是一个接近且安全的近似值?这就是我在使用 max_size 时真正想要做的事情,因为我认为与更理论上的 (size_t)-1 相比,这是一个实际限制
标签: c++ vector initialization