#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char *argv[]) {
vector<int> v{0, 1, 2, 3, 4};
for (auto it = v.begin(), e = v.end(); it != e; ++it) {
const int x = *it;
cout << x << endl;
v.push_back(x);
}
return 0;
}
我是C语言的新手,我有此程序,我认为答案应该是0 1 2 34。但实际上输出是0 0 2 34。我想知道原因。
答案 0 :(得分:0)
您已调用未定义的行为。 v
调整大小时(很可能在第一个push_back
发生),所有现有的迭代器都变为无效。在那种情况下,您不能依赖任何特定的行为。您没有以半无限循环结束的唯一原因是您也缓存了end
迭代器,并且两个无效的迭代器指向了旧内存,并且有点按预期工作了(但可能不会在不同的编译器,操作系统,运行时库,月相等)。