list <T>オブジェクトを別のオブジェクトに追加する方法


92

C ++では、2つのlist<T>オブジェクトがAありB、のすべてのメンバーBをの末尾に追加したいと思いAます。いくつかのソースを検索しましたが、簡単な解決策(ei A.append(B);)が見つかりませんでした。

これを行う最良の方法は何ですか?

たまたま、私はこの後Bは気にしません(次の行で削除されます)ので、より良いパフォーマンスのためにそれを活用する方法があれば、私もそれに興味があります。

回答:


192

B のアイテムのコピーを追加する場合は、次のようにできます。

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

BのアイテムをAの末尾に移動する(同時にBを空にする)場合は、次のようにします。

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

あなたの状況では、リンクされたリストのいくつかのポインタを調整するだけなので、スプライシングの方が優れています。


8
+1。しっくり来る。マップとセットを「スライス」するのがとても簡単で効率的だったとしたら...
paercebal

これらの操作のいずれかがO(1)ですか?
Chris Redford

2
上記の場合、スプライスはO(1)になるはずです。
chunkyguy 2013年

9
a.splice(a.end(), b)and は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
なぜ、なぜ、STLがa.append(b)をサポートできないのですか?
17

-3

ブーストを使用した1つの例

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 ); }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.