1

使用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() 的不一致行为,这很烦人。

与在任何其他位置相比,为什么 insert() 在最后的行为不同?还是我做错了什么?

4

1 回答 1

7

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

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

编辑:关于你的第二个问题,你在if (*iter == 'g'). 不过,在未来,请在新帖子中提出新问题。

于 2009-12-29T01:09:51.107 回答