如何将列表<T>对象附加到另一个

BCS*_*BCS 84 c++ stl list

在C++中,我有两个list<T>对象A,B我希望将所有成员添加B到结尾A.我搜索了几个不同的来源,并没有找到一个简单的解决方案(ei A.append(B);),这让我感到惊讶.

做这个的最好方式是什么?

碰巧的是,我在此之后并不关心B(它会在下一行被删除)所以如果有一种方法可以利用它来获得更好的性能,我也对此感兴趣.

Unc*_*ens 177

如果要在B中附加项目副本,可以执行以下操作:

a.insert(a.end(), b.begin(), b.end());
Run Code Online (Sandbox Code Playgroud)

如果要将B 项移动到A的末尾(同时清空B),您可以执行以下操作:

a.splice(a.end(), b);
Run Code Online (Sandbox Code Playgroud)

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

  • +1.好吧.如果能够如此简单有效地"切片"地图和集合...... (8认同)
  • 对于`a.splice(a.end(),b)`和`a.splice(a.end(),b,it_b_start)`它是O(1),但对于`a.splice是O(n) (a.end(),b,it_b_start,it_b_end)`. (8认同)
  • 对于上面的情况,我猜拼接应该是O(1). (2认同)
  • 为什么O为什么STL无法仅支持a.append(b)? (2认同)