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

tow*_*owi 6 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);
}
Run Code Online (Sandbox Code Playgroud)

它适用于g ++ - 6,但这不是证据.

对于一个人it<v.end()可能只能使用vectors,我想它应该it!=v.end()一般阅读.但是在这个示例中,当它已经结束时,将无法识别vif ++it的结尾.

Bat*_*eba 12

没有行为未定义.您可以设置迭代器end(),但不能增加它或取消引用它.

只要背衬容器不为空,您就可以减少它.

  • "请注意,递增指针也不是UB".这是不正确的.只允许在指针算法有效的情况下递增指针(例如,数组,一个经过数组,一个超过标量). (3认同)