是否允许增加已在end()
的迭代器变量it
,即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()
一般。但是在这个例子中,如果++it
已经结束,那么它将不会识别v
的结尾。
使用'!='将达到与<<相同的效果,减去整个小于零部件... – user2296177
无论如何,您的代码在逻辑上被打破。这就是为什么这样的代码通常会将'++ it'移到body中的else ++ it(假设首先有一个条件的'.erase';否则,循环是什么?) –
@LightnessRacesinOrbit oh ,你是说因为我只删除每一个第二个元素?不,那是设计。但你是对的,我应该提到这一点。就像现在这样,它看起来很坏,我同意。我将添加代码评论。 – towi