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

ちゃんとソートされていますね。

ですが、これってつまり連結するときにデータを全部調べてるってことですよね。純粋に連結したいだけの場合にちょっと微妙かもしれません。