gpt4 book ai didi

c++ - STL::deque 的 insert(loc, val) - 在 deque 结束时与其他位置的行为不一致?

转载 作者:行者123 更新时间:2023-11-30 00:42:05 26 4
gpt4 key购买 nike

使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com