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


92

在C ++中,我有两个list<T>对象AB并且想要将的所有成员添加B到的末尾A。我搜索了一些不同的资源,但没有找到一个简单的解决方案(ei A.append(B);),这让我有些惊讶。

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

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

Answers:


192

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

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

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

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

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


8
+1。好吧 如果“切片”地图和集合本来是如此容易和高效的话
paercebal

这两个操作都是O(1)吗?
克里斯·雷德福

2
我想上述情况的拼接应该是O(1)。
chunkyguy

9
a.splice(a.end(), b)和是O(1),对a.splice(a.end(), b, it_b_start)是O(n)a.splice(a.end(), b, it_b_start, it_b_end)
hkBattousai 2013年

9
为什么O为什么STL无法仅支持a.append(b)?
srking

-3

使用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 ); }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.