#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 ); //線形時間