listクラスでリスト同士の連結
http://www.geocities.jp/ky_webid/cpp/library/003.html
listクラス同士を連結することができます。
#include <iostream> #include <list> using namespace std; int main () { list<int> data1; list<int> data2; data1.push_back( 30 ); data1.push_back( 60 ); data1.push_back( 20 ); data2.push_back( 80 ); data2.push_back( 40 ); data2.push_back( 50 ); // data1にdata2を連結させる data1.merge( data2 ); list<int>::iterator it = data1.begin(); while( it != data1.end() ) { cout << *it << endl; it++; } }
$ main 30 60 20 80 40 50
できました。
また、連結する前のデータがソートされた状態だった場合、連結後のデータもソートされます。
#include <iostream> #include <list> using namespace std; int main () { list<int> data1; list<int> data2; // data1リスト内でソートされている data1.push_back( 20 ); data1.push_back( 30 ); data1.push_back( 60 ); // data2リスト内でソートされている data2.push_back( 40 ); data2.push_back( 50 ); data2.push_back( 80 ); // data1にdata2を連結させるとソートされた状態になる data1.merge( data2 ); list<int>::iterator it = data1.begin(); while( it != data1.end() ) { cout << *it << endl; it++; } }
$ main 20 30 40 50 60 80
ちゃんとソートされていますね。
ですが、これってつまり連結するときにデータを全部調べてるってことですよね。純粋に連結したいだけの場合にちょっと微妙かもしれません。