Kac*_*che 1 c++ insert deque undefined-behavior
使用http://www.cppreference.com/wiki/stl/deque/insert作为参考,我在某些位置将值插入到双端队列中.
例如,如果deque A是:
a, b, d, e, g
Run Code Online (Sandbox Code Playgroud)
使用指向d的迭代器,我可以:
A.insert(iter, c); // insert val c before loc iter
//deque is now a, b, c, d, e, g
Run Code Online (Sandbox Code Playgroud)
并且iter仍然指向d.但是,当iter指向g时,最后一个元素:
A.insert(iter, f);
//deque is now a, b, c, d, e, f, g
Run Code Online (Sandbox Code Playgroud)
但它现在指向f !!
我目前的解决方法是:
iter = A.insert(loc, val); // point iterator to element that was inserted before loc
iter++; // point iter back to loc
Run Code Online (Sandbox Code Playgroud)
我没有再测试过这个或者任何东西,花了这么多时间跟踪一个错误,只是为了发现插入()在所有地方的stl中的不一致行为很烦人.
与其他任何位置相比,为什么insert()在最后表现不同?还是我做错了什么?
执行插入会使所有现有迭代器无效,因此您将通过重用旧迭代器来获得不可预测的行为(可能是崩溃).
您的解决方法是正确的解决方案.
编辑:关于你的第二个问题,你之后缺少大括号if (*iter == 'g').但是在将来,请在新帖子中提出新问题.
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |