名前空間
変種
操作

イテレータライブラリ

提供: cppreference.com
< cpp

イテレータライブラリは 5種類 (C++17以前)6種類 (C++17およびそれ以降)のイテレータ、イテレータ特性、アダプタ、ユーティリティ関数に対する定義を提供します。

目次

[編集] イテレータのカテゴリ

InputIterator, OutputIterator, ForwardIterator, BidirectionalIterator, RandomAccessIterator, ContiguousIterator (C++17およびそれ以降)5種類 (C++17以前)6種類 (C++17およびそれ以降)のイテレータがあります。

特定の型を定義する代わりに、イテレータの各々のカテゴリは実行可能な操作によって定義されます。 つまり必要な操作をサポートするあらゆる型をイテレータとして使用できるという意味です。 例えば、ポインタは RandomAccessIterator の要求する操作をすべてサポートしているため、 RandomAccessIterator が期待されるあらゆる場所でポインタを使用することができます。

すべてのイテレータのカテゴリ (OutputIterator および ContiguousIterator を除く) は階層的に整理できます。 より強力なイテレータカテゴリ (例えば RandomAccessIterator) はそれより強力でないカテゴリ (例えば InputIterator) の操作もサポートします。 イテレータがこれらのカテゴリのいずれかに分類され、さらに OutputIterator の要件も満たす場合、そのイテレータは可変イテレータと呼ばれ、入力と出力の両方をサポートします。 可変でないイテレータは定数イテレータと呼ばれます。

イテレータのカテゴリ 定義されている操作
RandomAccessIterator BidirectionalIterator ForwardIterator InputIterator
  • 読み込み
  • インクリメント (シングルパス)
  • インクリメント (マルチパス)
  • デクリメント
  • ランダムアクセス

上記のカテゴリのいずれかに分類され、さらに OutputIterator の要件も満たすイテレータは、可変イテレータと呼ばれます。

OutputIterator
  • 書き込み
  • インクリメント (シングルパス)

上記のカテゴリのいずれかに分類され、さらに ContiguousIterator の要件も満たすイテレータは、隣接イテレータと呼ばれます。

ContiguousIterator
  • 隣接した記憶域

ノート: ContiguousIterator カテゴリは C++17 で正式に規定されたものですが、 C++17 以前のコードでも std::vector, std::basic_string, std::array, std::valarray のイテレータおよび C の配列へのポインタはしばしば別のカテゴリとして扱われていました。

[編集] イテレータプリミティブ

イテレータの性質への統一されたインタフェースを提供します
(クラステンプレート) [edit]
イテレータのカテゴリを示すために使用される空クラス型
(クラス) [edit]
(C++17で非推奨)
シンプルなイテレータのための型要件の定義を簡単にする基底クラス
(クラステンプレート) [edit]

[編集] イテレータアダプタ

逆順探索のためのイテレータアダプタ
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.

(クラステンプレート) [edit]
引数から推定した型の std::reverse_iterator を作成します
(関数テンプレート) [edit]
右辺値参照を逆参照するイテレータアダプタ
(クラステンプレート) [edit]
引数から推定した型の std::move_iterator を作成します
(関数テンプレート) [edit]
コンテナの末尾に挿入するためのイテレータアダプタ
(クラステンプレート) [edit]
引数から推定した型の std::back_insert_iterator を作成します
(関数テンプレート) [edit]
コンテナの先頭に挿入するためのイテレータアダプタ
(クラステンプレート) [edit]
引数から推定した型の std::front_insert_iterator を作成します
(関数テンプレート) [edit]
コンテナに挿入するためのイテレータアダプタ
(クラステンプレート) [edit]
引数から推定した型の std::insert_iterator を作成します
(関数テンプレート) [edit]

[編集] ストリームイテレータ

std::basic_istream から読み込む入力イテレータ
(クラステンプレート) [edit]
std::basic_ostream に書き込む出力イテレータ
(クラステンプレート) [edit]
std::basic_streambuf から読み込む入力イテレータ
(クラステンプレート) [edit]
std::basic_streambuf に書き込む出力イテレータ
(クラステンプレート) [edit]

[編集] イテレータ操作

ヘッダ <iterator> で定義
イテレータを指定された距離だけ前進させます
(関数) [edit]
2つのイテレータ間の距離を返します
(関数) [edit]
(C++11)
イテレータをインクリメントします
(関数) [edit]
(C++11)
イテレータをデクリメントします
(関数) [edit]

[編集] 範囲アクセス

これらの非メンバ関数はコンテナ、普通の配列、 std::initializer_list に対する汎用のインタフェースを提供します。

ヘッダ <iterator> で定義
(C++11)(C++14)
コンテナまたは配列の先頭を指すイテレータを返します
(関数) [edit]
(C++11)(C++14)
コンテナまたは配列の終端を指すイテレータを返します
(関数) [edit]
コンテナまたは配列の先頭を指す逆イテレータを返します
(関数) [edit]
(C++14)
コンテナまたは配列の終端を指す逆イテレータを返します
(関数) [edit]

[編集] コンテナアクセス

これらの非メンバ関数はコンテナ、普通の配列、 std::initializer_list に対する汎用のインタフェースを提供します。

(C++17)
コンテナまたは配列のサイズを返します
(関数) [edit]
(C++17)
コンテナが空かどうか調べます
(関数) [edit]
(C++17)
ベースとなる配列を指すポインタを取得します
(関数) [edit]