stl :: deque的insert(loc,val) - deque结尾与其他位置的不一致行为?

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()在最后表现不同?还是我做错了什么?

int*_*jay 7

执行插入会使所有现有迭代器无效,因此您将通过重用旧迭代器来获得不可预测的行为(可能是崩溃).

您的解决方法是正确的解决方案.

编辑:关于你的第二个问题,你之后缺少大括号if (*iter == 'g').但是在将来,请在新帖子中提出新问题.