トップ-> C++入門:7章 STL-> list

←前ページへ :  トップへ :  次ページへ→

8. list


  listはすでに説明したように、双方向にアクセス可能な線形リストです。最初から最後へ、最後から 最初へ順番(シーケンシャル)に参照していく場合に有効ですが、ランダムアクセスには不向きです。 データの追加、削除を頻繁に行うデータ構造に有効です。

パフォーマンス
作業内容 処理速度
要素の追加 定数時間(要素数によらない)
要素の削除 定数時間(要素数によらない)
ランダムアクセス 不可能(強いて言うなら線形時間(要素数に比例して時間がかかる))

listクラスの主要な関数
関数名 書 式 説 明
begin iterator begin() 先頭を表わすイタレーターを返します
end iterator end() 末尾を表わすイタレーターを返します
末尾とは最後の要素の次を表わします
rbegin reverse_iterator rbegin() 末尾を表わす逆方向イタレーターを返します
末尾とは最後の要素の次を表わします
rend reverse_iterator rend() 先頭を表わす逆方向イタレーターを返します
empty bool empty() listの要素が0なら「true」を、カラでなければ「false」を返します
size int size() 要素数を返します
push_back void push_back( const T &value ) listの末尾にデータを追加します
push_front void push_front( const T &value ) listの先頭にデータを追加します
pop_back void pop_back() listの末尾の要素を削除します
pop_front void pop_front() listの先頭の要素を削除します
insert iterator insert( iterator itr, const T &value ) itrの直前にvalueを挿入します
insert iterator insert( iterator itr, size_t num, const T &value ) itrの直前にvaluenum個挿入します
insert iterator insert( iterator itr, const_iterator first, const_iterator last ) itrの直前にfirstからlastの間のデータをコピーして挿入します
erase iterator erase( iterator itr ) itrの示す要素を削除します
erase iterator erase( iterator start, iterator end ) startからendまでの要素を削除します
clear void clear() すべての要素を削除します
front reference front() listの先端の要素を返します
back reference back() listの末尾の要素を返します
remove void remove(const T& value) valueと同じ要素を削除します
reverse void reverse( ) リストの順番を逆順にします
sort void sort( ) リストを昇順にソートします
merge void merge( list& lst ) 引数lstの要素を現在のリストに追加し、lstの要素をすべて削除します
2つのリストが昇順にソートされていれば、できたリストも昇順にソートされている
unique void unique( ) リスト中に同じ要素が連続していた場合、1つを残して削除します
assign void assign( const iterator first, const iterator last ) list(自分自身)の内容をfirstからlastに置き換えます
assign void assign( size_type n, const T& x = T() ) list(自分自身)の内容をn個のxに置き換えます
swap void swap( list x ) list(自分自身)の内容をxと交換します

コンストラクタ
書 式 説 明
list(const A& al = A())
例) list<int> list1;

長さ0のint型のlist1を作る
list(size_type n, const T& v = T(), const A& al = A())
例) list<int> list2(20)

長さ20のint型list2を作る
list(const list& x)
例) list<int> list3(10, 100);

長さ10のint型list3を作り、すべての要素を100で初期化する
list(const_iterator first, const_iterator last, const A& al = A())
例) list<int> list4(list1);

list1をコピーし、list4とする
  listで使用されるイタレーターは双方向イタレーターであるため、vectorのようなat関数や[]オペレーター は使用できません。その代わり、push_frontのような関数が追加されています。また、ソートを行う場合は、 ランダムアクセスイタレーターが使用できないため、アルゴリズムのsort関数ではなく、listクラスで用意 されているsort関数を使用します。

  vectorでは、要素の追加や削除が行われた場合、すべての領域が新しく確保されていたため、それまで 使用していたイタレーターや参照は使用できなくなりました。これに対してlistでは、リストの再割り当てが 行われるのはごく一部だけなので、削除された部分を示すイタレーターや参照のみが使用できなくなり、 それ以外のイタレーターや参照はそのまま使用できます。

  次のページでは実際に使ってみます。


←前ページへ :  トップへ :  次ページへ→