#include listまとめ。
TopCoderではvector一辺倒でなにかと使わないlistですが、カードシャッフル等の操作をするときとかはかなり便利です.
explicit list( size_type 長さ, const T& 値 = T() ); //イテレータでの初期化ももちろん可能. list& operator=(const list& c2); bool operator==(const list& c1, const list& c2); bool operator!=(const list& c1, const list& c2); bool operator<(const list& c1, const list& c2); bool operator>(const list& c1, const list& c2); bool operator<=(const list& c1, const list& c2); bool operator>=(const list& c1, const list& c2); //これを見ても分かる通り、ベクターにはある[]演算子と、-,+演算子がないことに注意. int pos = it - List.begin(); //とかはできない。 //データ構造的に配列ではなくpointer,Listで表現しているから、当たり前のこと.
insert
iterator insert( iterator 場所, const T& 値 ); void insert( iterator 場所, size_type 数, const T& 値 ); void insert( iterator 場所, input_iterator start, input_iterator end ); insert()関数は: “場所”の前の位置に”値”を挿入し、挿入された要素へのイテレータを返すか、 “場所”の前に”数”で指定された個数だけ”値”をコピーして挿入するか、 startからendの間の要素を挿入します。 //最後に値を入れたければ、 insert(List.end(), num);
erase
iterator erase( iterator 場所 ); //定数時間 iterator erase( iterator start, iterator end ); //線形時間 eraseメソッドは、場所の要素を消したり、startからendの間の要素(startは含むがendは含まない)を削除したりします。 返り値は、削除した要素の次の要素になります。
remove
これも便利そう. void remove( const T &値 ); //線形時間 remove()関数は、”値”と同じ値を持つ、すべての要素をリストから削除します。 //"ABCBCBC" --remove('B')->"ACCC"
splice
splice関数は、1つ以上の要素をlstで指定されたリストから移動して、posで指定された直前の位置に挿入します。 void splice( iterator pos, list& lst ); //定数時間 list::iterator m = arr.begin(); advance(m, 2); arr.splice(m, brr); //splice(2, brr)は無理. arr.splice(m, arr) //arr.size() == 0 arr.splice(arr.begin(), arr) //arr.size() == oo arr.splice(arr.end(), arr) //arr.size() //なにもかわらず void splice( iterator pos, list& lst, iterator del ); //定数時間 list ::iterator m = arr.begin(); advance(m, 2); arr.splice(m, brr, brr.begin()); //シャッフルしたい list ::iterator m = arr.begin(); list ::iterator k = arr.begin(); advance(k, 9); advance(m, 2); arr.splice(m, arr, k); // 0 1 9 2 3 4 5 6 7 8 とおもったとおりの結果が出る. //arr.splice(m, arr, arr.end() ) //2 3 4 5 6 7 8 9 0 1 となってしまう。 //シャッフルするなら、あらかじめイテレータを格納しておいた方が無難. void splice( iterator pos, list& lst, iterator start, iterator end ); //線形時間