web-dev-qa-db-ja.com

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

c ++では、2つのlist<T>オブジェクトABがあり、BのすべてのメンバーをAの最後に追加したい。私はいくつかの異なるソースを検索しましたが、簡単な解決策は見つかりませんでした(e.i. A.append(B);)。これは少し驚きです。

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

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

84
BCS

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

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

アイテムの移動 BのAの終わり(同時にBを空にする)にしたい場合は、以下を実行できます。

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

あなたの状況では、リンクされたリストのいくつかのポインタを調整するだけなので、スプライシングがより良いでしょう。

174
UncleBens

ブーストを使用する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 ); }
0
serup