与C ++中的循环和变异向量相混淆

时间:2019-03-06 02:59:11

标签: c++ loops vector push-back

#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。我想知道原因。

1 个答案:

答案 0 :(得分:0)

您已调用未定义的行为。 v调整大小时(很可能在第一个push_back发生),所有现有的迭代器都变为无效。在那种情况下,您不能依赖任何特定的行为。您没有以半无限循环结束的唯一原因是您也缓存了end迭代器,并且两个无效的迭代器指向了旧内存,并且有点按预期工作了(但可能不会在不同的编译器,操作系统,运行时库,月相等)。