是否允許增加已在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