イテレータライブラリ
イテレータライブラリはイテレータの定義、イテレータ特性、アダプタおよびユーティリティ関数を提供します。
目次 |
[編集]イテレータのカテゴリ
InputIterator
, OutputIterator
, ForwardIterator
, BidirectionalIterator
, RandomAccessIterator
, ContiguousIterator
(C++17およびそれ以降) の 5種類(C++17以前)6種類(C++17およびそれ以降) のイテレータがあります。
特定の型を定義する代わりに、イテレータの各々のカテゴリは実行可能な操作によって定義されます。 つまり必要な操作をサポートするあらゆる型をイテレータとして使用できるという意味です。 例えば、ポインタは RandomAccessIterator
の要求する操作をすべてサポートしているため、 RandomAccessIterator
が期待されるあらゆる場所でポインタを使用することができます。
すべてのイテレータのカテゴリ (OutputIterator
を除く) は階層的に整理できます。 より強力なイテレータカテゴリ (例えば RandomAccessIterator
) はそれより強力でないカテゴリ (例えば InputIterator
) の操作をサポートします。 イテレータがこれらのカテゴリのいずれかに分類され、さらに OutputIterator
の要件も満たす場合、そのイテレータは可変イテレータと呼ばれ、入力と出力の両方をサポートします。 可変でないイテレータは定数イテレータと呼ばれます。
イテレータカテゴリ | 定義されている操作 | ||||
---|---|---|---|---|---|
ContiguousIterator (隣接イテレータ) | RandomAccessIterator (ランダムアクセスイテレータ) | BidirectionalIterator (双方向イテレータ) | ForwardIterator (前方イテレータ) | InputIterator (入力イテレータ) |
|
| |||||
| |||||
| |||||
| |||||
上記のカテゴリのいずれかに分類され、さらに | |||||
OutputIterator (出力イテレータ) |
|
ノート: ContiguousIterator
カテゴリは C++17 で正式に規定されたものですが、 C++17 以前のコードでも std::vector, std::basic_string, std::array, std::valarray のイテレータおよび C の配列へのポインタはしばしば別のカテゴリとして扱われていました。
[編集] イテレータプリミティブ
イテレータの性質への統一されたインタフェースを提供します (クラステンプレート) | |
イテレータのカテゴリを示すために使用される空クラス型 (クラス) | |
(deprecated in C++17) | シンプルなイテレータのための型要件の定義を簡単にする基底クラス (クラステンプレート) |
[編集] イテレータアダプタ
逆順探索のためのイテレータアダプタ Original: iterator adaptor for reverse-order traversal The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (クラステンプレート) | |
(C++14) | 引数から推定した型の std::reverse_iterator を作成します (関数テンプレート) |
(C++11) | 右辺値参照を逆参照するイテレータアダプタ (クラステンプレート) |
(C++11) | 引数から推定した型の std::move_iterator を作成します (関数テンプレート) |
コンテナの末尾に挿入するためのイテレータアダプタ (クラステンプレート) | |
引数から推定した型の std::back_insert_iterator を作成します (関数テンプレート) | |
コンテナの先頭に挿入するためのイテレータアダプタ (クラステンプレート) | |
引数から推定した型の std::front_insert_iterator を作成します (関数テンプレート) | |
コンテナに挿入するためのイテレータアダプタ (クラステンプレート) | |
引数から推定した型の std::insert_iterator を作成します (関数テンプレート) |
[編集] ストリームイテレータ
std::basic_istream から読み込む入力イテレータ (クラステンプレート) | |
std::basic_ostream に書き込む出力イテレータ (クラステンプレート) | |
std::basic_streambuf から読み込む入力イテレータ (クラステンプレート) | |
std::basic_streambuf に書き込む出力イテレータ (クラステンプレート) |
[編集] イテレータ操作
ヘッダ <iterator> で定義 | |
イテレータを指定された距離だけ前進させます (関数) | |
2つのイテレータ間の距離を返します (関数) | |
(C++11) | イテレータをインクリメントします (関数) |
(C++11) | イテレータをデクリメントします (関数) |
[編集] 範囲アクセス
これらの非メンバ関数はコンテナ、普通の配列、 std::initializer_list に対する汎用のインタフェースを提供します。
ヘッダ <iterator> で定義 | |
(C++11)(C++14) | コンテナまたは配列の先頭を指すイテレータを返します (関数) |
(C++11)(C++14) | コンテナまたは配列の終端を指すイテレータを返します (関数) |
(C++14) | コンテナまたは配列の先頭を指す逆イテレータを返します (関数) |
(C++14) | コンテナまたは配列の終端を指す逆イテレータを返します (関数) |
[編集] コンテナアクセス
これらの非メンバ関数はコンテナ、普通の配列、 std::initializer_list に対する汎用のインタフェースを提供します。
(C++17) | コンテナまたは配列のサイズを返します (関数) |
(C++17) | コンテナが空かどうか調べます (関数) |
(C++17) | ベースとなる配列を指すポインタを取得します (関数) |