【问题标题】:how to append a list<T> object to another如何将 list<T> 对象附加到另一个对象
【发布时间】:2010-11-29 19:11:33
【问题描述】:

在 C++ 中,我有两个 list&lt;T&gt; 对象 AB,我想将 B 的所有成员添加到 A 的末尾。我搜索了几个不同的来源,但没有找到一个简单的解决方案(例如A.append(B);),这让我有点吃惊。

最好的方法是什么?

碰巧,在这之后我不再关心 B(它在下一行被删除)所以如果有办法利用它来获得更好的性能,我也对此感兴趣。

【问题讨论】:

    标签: c++ list stl


    【解决方案1】:

    如果你想在 B 中附加 项目的副本,你可以这样做:

    a.insert(a.end(), b.begin(), b.end());
    

    如果你想将 B 的项目移动到 A 的末尾(同时清空 B),你可以这样做:

    a.splice(a.end(), b);
    

    在你的情况下拼接会更好,因为它只涉及调整链表中的几个指针。

    【讨论】:

    • +1。所以对。如果“切片”地图和集合可以如此简单和高效......
    • 这些操作中的任何一个都是 O(1) 吗?
    • 我猜 splice 对于上述情况应该是 O(1)。
    • a.splice(a.end(), b)a.splice(a.end(), b, it_b_start) 是 O(1),但 a.splice(a.end(), b, it_b_start, it_b_end) 是 O(n)。
    • 为什么,为什么,STL 不能只支持 a.append(b)?
    【解决方案2】:

    一个使用 boost 的例子

    std::list<T> A; // object A is a list containing T structure
    std::list<T> B; // object B is a list containing T structure
    
    // append list B to list A
    BOOST_FOREACH(auto &listElement, B) { A.push_back( listElement ); }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 2019-01-04
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多