一个很基础的 C++ std::list 问题

2017-03-26 12:50:59 +08:00
 starvedcat
现在有一个 std::list list1 , size=100 ,还有一个 list::iterator it ,它*已经*指向了 list1 中的第 50 项
我现在想新建一个 std::list list2 ,该 list2 与 list1 基本相同:除了需要 erase 掉第 50 项以外,别的数据完全一样
请问有没有在不从头开始重新数 50 项的情况下、利用现成的 list::iterator it 来实现的方法?

我现在想到的只能是,先把第50项的数据另存,然后用 it erase 掉 list1 中的第 50 项,再用 list1 新建 list2 ,最后把这个第 50 项的数据重新插入到 list1 中去。
然而如果 list1 是只读的呢?有没有不从头开始重新数 50 项的方法?
1172 次点击
所在节点    问与答
1 条回复
lcdtyph
2017-03-26 13:05:11 +08:00
std::copy(list1.begin(), it, std::back_inserter(list2));
std::copy(++it, list1.end(), std::back_inserter(list2));
第二部因为 list 是个循环链表,所以在尾部插入也是 O(1)的,不需要从头数到尾巴。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/350376

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX