V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
starvedcat
V2EX  ›  问与答

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

  •  
  •   starvedcat · 2017-03-26 12:50:59 +08:00 · 1208 次点击
    这是一个创建于 2791 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在有一个 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 项的方法?
    1 条回复    2017-03-26 13:05:11 +08:00
    lcdtyph
        1
    lcdtyph  
       2017-03-26 13:05:11 +08:00   ❤️ 1
    std::copy(list1.begin(), it, std::back_inserter(list2));
    std::copy(++it, list1.end(), std::back_inserter(list2));
    第二部因为 list 是个循环链表,所以在尾部插入也是 O(1)的,不需要从头数到尾巴。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3262 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:43 · PVG 18:43 · LAX 02:43 · JFK 05:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.