是否允许增加结束迭代器?

时间:2016-10-02 18:07:20

标签: c++ iterator

是否允许增加已经在it的迭代器变量end(),即auto it = v.end()

  • 一般是允许的吗?
  • 如果没有,是否不允许vector
  • 如果是,++it可能幂等,如果it==v.end()

我问,因为我偶然发现了这样的代码:

std::vector<int> v{ 1, 2, 3, 4, 5, 6, 7 };
// delete every other element
for(auto it=v.begin(); it<v.end(); ++it) { // it<end ok? ++it ok on end?
  it = v.erase(it);
}

它适用于g ++ - 6,但这不是证明。

对于一个it<v.end(),可能仅适用于vectors,我认为一般应该阅读it!=v.end()。但是,在此示例中,如果v已应用于++it,则无法识别"post-update-cmd": "App\\Console\\Installer::postUpdate", 的结尾。

1 个答案:

答案 0 :(得分:11)

行为未定义。您可以将迭代器设置为end(),但不能将其递增或取消引用它。

只要背衬容器不是空的,就可以减少它。