【发布时间】:2016-01-21 20:23:05
【问题描述】:
有人可以向我解释为什么这个简单的代码:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v = {0, 1, 2, 3, 4, 5};
for(auto i: v)
{
std::cout << i << ' ';
}
std::cout << std::endl;
for(auto i: v)
{
std::cout << i << ' ';
v.push_back(4);
}
std::cout << std::endl;
for(auto i: v)
{
std::cout << i << ' ';
}
}
此处发布代码:http://cpp.sh/5kxdu
输出:
0 1 2 3 4 5
0 0 2 3 4 5
0 1 2 3 4 5 4 4 4 4 4 4
虽然我期望:
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5 4 4 4 4 4 4
我知道在for 循环期间修改向量是不好的(当我点击这个时只是在尝试其他东西)。在v 声明之后,v.capacity() 返回6,显然,在声明v 之后添加v.reserve(12) 可以解决问题。在push_back 操作期间,肯定有一些与向量重新分配自身以扩展其容量有关。
但我想知道这是否只是一种不确定的行为,我很幸运只有第二个元素是错误的,或者这是否是可预测和可解释的(考虑到 for 循环的工作原理)。
【问题讨论】: