c++primer.4th.这个地方错了吗
在该书276页的第4小结:避免存储end 操作返回的迭代器中有如下一段话和程序:
“ 例如,考虑-个读取容器中每个元素的循环,对读出元素做完处理后,在原始元素后面插入
一个新元素。我们希望该循环可以处理每个原始元素,然后使用insert 函数插入新元素,井返
回指向刚插入元素的选代器。在每次插入操作完成后,给返回的迭代器自增L 以使循环定位在
下→个要处理的原始元素。如果我们尝试通过存储end 操作返回的迭代器来"优化"该循环,将
导致灾难性错误:
vector<int>::iterator first = v.begin() ,las t = v. end ( ); / / cache end iterator/ / diaster: behavior of this loop is unde.卢'nedwhile (first != last) (/ / do some processing/ / insert new value and reassign first , which otherwise would be invalidfirst = v.insert(first , 42);++first; / / advance firstjust past the element we added}
/ / safer: recalculate end on each trip whenever the loop adds/erases elementswhile (first != v.end()) (/ / do some processingfirst = v.insert(first , 42); // insertnewvalue++first; / / advance first just past the element we added}