使用 http://www.cppreference.com/wiki/stl/deque/insert作为引用,我在某些位置将值插入双端队列。
例如,如果双端队列 A 是:
a, b, d, e, g
使用指向 d 的迭代器,我可以:
A.insert(iter, c); // insert val c before loc iter
//deque is now a, b, c, d, e, g
并且 iter 仍然指向 d。但是,当 iter 指向 g 时,最后一个元素:
A.insert(iter, f);
//deque is now a, b, c, d, e, f, g
但 iter 现在指向 f!!
我目前的解决方法是:
iter = A.insert(loc, val); // point iterator to element that was inserted before loc
iter++; // point iter back to loc
我还没有再次测试过这个或任何东西,花了这么多时间追踪一个错误很烦人,只是为了发现 insert() 的不一致行为,在 STL 中,所有 地点。
为什么 insert() 在末尾的行为与在任何其他位置的行为不同?还是我做错了什么?
最佳答案
执行插入会使所有现有迭代器失效,因此您将通过重用旧迭代器获得不可预知的行为(可能是崩溃)。
您的解决方法是正确的解决方案。
编辑:关于您的第二个问题,您在 if (*iter == 'g')
之后缺少大括号。不过,以后请在新帖子中提出新问题。
关于c++ - STL::deque 的 insert(loc, val) - 在 deque 结束时与其他位置的行为不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1972403/