【发布时间】:2014-06-03 07:32:41
【问题描述】:
我正在尝试创建一个向量,其中每个元素都是 1000 以下的 3 的倍数。我尝试了两种方法,其中只有一种有效。不起作用的方式是:
int main() {
vector<int> multiples_of_three;
for (int i = 0; i <= 1000/3; ++i)
multiples_of_three[i] = 3*i;
cout << multiples_of_three[i] << "\n";
}
这给出了一个超出范围的错误,特别是在 multiples_of_three[i] 上。下一段代码起作用了:
int main() {
vector<int> multiples_of_three(334);
for (int i = 0; i < multiples_of_three.size(); ++i) {
multiples_of_three[i] = 3*i;
cout << multiples_of_three[i];
}
因此,如果我定义了向量的大小,我可以将其保持在它的约束范围内。为什么如果我尝试让 for 循环决定元素的数量,我会得到超出范围的错误?
谢谢!
【问题讨论】:
-
直接分配可能有效也可能无效,通常您会调用
push_back,它会检查是否需要调整大小,然后创建一个足够大的新向量以进行分配,并将成员复制到新的向量 -
我觉得问题在这里得到了解答。 stackoverflow.com/questions/11007054/…
标签: c++ vector outofrangeexception