listクラス
http://www.geocities.jp/ky_webid/cpp/library/003.html
vectorクラスは配列のエミュレートでしたが、listクラスは双方向リストを便利に扱うためのクラスです。
まずは値の追加の仕方からやってみます。
#include <iostream> #include <list> using namespace std; int main () { list<int> data; for(int i=0;i<5;++i) { // 後ろへ値を追加する data.push_back(i); } for(int i=0;i<5;++i) { // 前へ値を追加する data.push_front(i*10); } }
vectorと似ていますが、push_frontという前から値を追加するメンバ関数が増えています。
表示にはイテレータを使います。listはあくまでもlistなのでvectorのように[]演算子オーバーロードによるアクセスはできません。
#include <iostream> #include <list> using namespace std; int main () { list<int> data; for(int i=0;i<5;++i) { data.push_back(i); } for(int i=0;i<5;++i) { data.push_front(i*10); } list<int>::iterator it = data.begin(); while( it != data.end() ) { cout << *it << endl; it++; } }
$ main 40 30 20 10 0 0 1 2 3 4
sort関数でソートもできます。
#include <iostream> #include <list> using namespace std; int main () { list<int> data; for(int i=0;i<5;++i) { data.push_back(i); } for(int i=0;i<5;++i) { data.push_front(i*10); } // 昇順でソートする data.sort(); list<int>::iterator it = data.begin(); while( it != data.end() ) { cout << *it << endl; it++; } }
$ main 0 0 1 2 3 4 10 20 30 40
降順でソートする場合はfunctionalヘッダを読み込んでgreaterテンプレートを使用します。
#include <iostream> #include <list> #include <functional> using namespace std; int main () { list<int> data; for(int i=0;i<5;++i) { data.push_back(i); } for(int i=0;i<5;++i) { data.push_front(i*10); } // 降順でソートする data.sort( greater<int>() ); list<int>::iterator it = data.begin(); while( it != data.end() ) { cout << *it << endl; it++; } }
$ main 40 30 20 10 4 3 2 1 0 0
ちゃんと降順になっていますね。