最終更新日時(UTC):
が更新

履歴 編集

<iterator>

iterator

<iterator>ヘッダでは、イテレータに関する機能群を提供する。 イテレータは日本語では反復子とも呼ばれ、配列やコンテナのような範囲を横断する手段として使用できる。

C++標準ライブラリのイテレータは、以下のように階層的に定義される。 この階層はC++言語機能の継承と同じように見なせる。たとえば、入力イテレータと前方向イテレータはis a関係が成り立っており、前方向イテレータは入力イテレータと見なすことができる。

C++20以降の標準ライブラリでは、任意のイテレータに対して可能な操作によって上記5つに隣接イテレータ(contiguous iterator)を加えた6つのイテレータカテゴリを定義する。それぞれ次のイテレータコンセプトが対応する。

このヘッダでは、以下の標準ヘッダをインクルードする:

イテレータコンセプト

名前 説明 対応バージョン
indirectly_readable 間接参照によって読み取り可能 (concept) C++20
indirectly_writable 間接参照によって書き込み可能 (concept) C++20
weakly_incrementable 前置/後置インクリメント可能 (concept) C++20
incrementable weakly_incrementableかつ正則 (concept) C++20
input_or_output_iterator 基礎的なイテレータコンセプト (concept) C++20
sentinel_for 同じ範囲についてのイテレータと番兵 (concept) C++20
sized_sentinel_for 距離を定義可能なイテレータ (concept) C++20
disable_sized_sentinel_for sentinel_for<S, I>について、sized_sentinel_forを不適合にする (variable template) C++20
input_iterator 入力イテレータ (concept) C++20
output_iterator 出力イテレータ (concept) C++20
forward_iterator 前方向イテレータ (concept) C++20
bidirectional_iterator 双方向イテレータ (concept) C++20
random_access_iterator ランダムアクセスイテレータ (concept) C++20
contiguous_iterator 隣接イテレータ (concept) C++20

イテレータを介した関数呼び出しに関するコンセプト

名前 説明 対応バージョン
indirectly_unary_invocable イテレータの要素型によって呼び出し可能 (concept) C++20
indirectly_regular_unary_invocable 正則なindirectly_unary_invocable (concept) C++20
indirect_unary_predicate イテレータの要素型についての単項述語 (concept) C++20
indirect_binary_predicate 2つのイテレータの要素型についての二項述語 (concept) C++20
indirect_equivalence_relation 2つのイテレータの要素型についての同値関係 (concept) C++20
indirect_strict_weak_order 2つのイテレータの要素型についての狭義の弱順序 (concept) C++20

イテレータによるアルゴリズムに関するコンセプト

名前 説明 対応バージョン
indirectly_movable 片方のイテレータからもう片方のイテレータへ要素をムーブ可能 (concept) C++20
indirectly_movable_storable 片方のイテレータからもう片方のイテレータへ中間オブジェクトを介して要素をムーブ可能 (concept) C++20
indirectly_copyable 片方のイテレータからもう片方のイテレータへ要素をコピー可能 (concept) C++20
indirectly_copyable_storable 片方のイテレータからもう片方のイテレータへ中間オブジェクトを介して要素をコピー可能 (concept) C++20
indirectly_swappable 2つのイテレータ間で要素を交換可能 (concept) C++20
indirectly_comparable 2つのイテレータ間で要素を比較可能 (concept) C++20
permutable イテレータを介して要素を並べ替え可能 (concept) C++20
mergeable イテレータを介して範囲をマージ可能 (concept) C++20
sortable イテレータを介して範囲をソート可能 (concept) C++20

イテレータの情報

名前 説明 対応バージョン
iterator_traits イテレータに関する型情報(class template)
iterator イテレータを定義するための基底クラス(class template) C++17から非推奨
iter_difference_t イテレータのdifference_typeを取得する (alias template) C++20
iter_value_t イテレータのvalue_typeを取得する (alias template) C++20
iter_reference_t イテレータのreference_typeを取得する (alias template) C++20
iter_rvalue_reference_t イテレータの指す要素の右辺値参照型を取得する (alias template) C++20
iter_common_reference_t イテレータのvalue_typereference_typecommon_referenceを取得する (alias template) C++20
indirect_result_t 関数呼び出し可能な型Fを複数のイテレータIs...によって呼び出した時の戻り値型を取得する (alias template) C++20
projected イテレータIProjによる射影操作の結果を表すことのできるindirectly_readableなクラス (class template) C++20
incrementable_traits iter_difference_tにアダプトするためのカスタマイゼーションポイント (class template) C++20
indirectly_readable_traits iter_value_tにアダプトするためのカスタマイゼーションポイント (class template) C++20
input_iterator_tag 入力イテレータを表すタグ(class)
output_iterator_tag 出力イテレータを表すタグ(class)
forward_iterator_tag 前方向イテレータを表すタグ(class)
bidirectional_iterator_tag 双方向イテレータを表すタグ(class)
random_access_iterator_tag ランダムアクセスイテレータを表すタグ(class)
contiguous_iterator_tag 隣接イテレータを表すタグ(class) C++20

イテレータの進行と距離

名前 説明 対応バージョン
advance n回イテレータを進める(function template)
distance イテレータ間の距離を求める(function template)
next n回前方に進めたイテレータを返す(function template) C++11
prev n回後方に進めたイテレータを返す(function template) C++11
ranges::advance イテレータを進める(function template) C++20
ranges::distance 範囲の長さを求める(function template) C++20
ranges::next 前方に進めたイテレータを返す(function template) C++20
ranges::prev 後方に進めたイテレータを返す(function template) C++20

逆順イテレータ

名前 説明 対応バージョン
reverse_iterator 逆方向に進むイテレータアダプタ(class template)
make_reverse_iterator reverse_iteratorオブジェクトを作るヘルパ関数(function template) C++14

挿入イテレータ

名前 説明 対応バージョン
back_insert_iterator 末尾に要素を挿入する出力イテレータアダプタ(class template)
back_inserter back_insert_iteratorオブジェクトを作るヘルパ関数(function template)
front_insert_iterator 先頭に要素を挿入する出力イテレータアダプタ(class template)
front_inserter front_insert_iteratorオブジェクトを作るヘルパ関数(function template)
insert_iterator 任意の位置に要素を挿入する出力イテレータアダプタ(class template)
inserter insert_iteratorオブジェクトを作るヘルパ関数(function template)

要素を移動するイテレータ

名前 説明 対応バージョン
move_iterator 間接参照時にムーブするイテレータアダプタ(class template) C++11
make_move_iterator move_iteratorオブジェクトを作るヘルパ関数(function template) C++11
move_sentinel move_iteratorの終端を表す番兵型(class template) C++20

ストリームイテレータ

名前 説明 対応バージョン
istream_iterator 入力ストリームイテレータ(class template)
ostream_iterator 出力ストリームイテレータ(class template)
istreambuf_iterator 入力ストリームバッファイテレータ(class template)
ostreambuf_iterator 出力ストリームバッファイテレータ(class template)

その他のイテレータアダプタ

名前 説明 対応バージョン
common_iterator イテレータ型と番兵型が異なる場合に型を共通化するためのラッパーイテレータ(class template) C++20
counted_iterator 予め指定されたN個の要素だけをイテレートするラッパーイテレータ(class template) C++20

番兵型

名前 説明 対応バージョン
default_sentinel_t 任意の範囲の終端を表すことのできるデフォルトの番兵型(class template) C++20
unreachable_sentinel_t 別の方法で終端が指定される範囲の仮想的な終端を表す番兵型(class template) C++20

先頭イテレータと末尾イテレータ

名前 説明 対応バージョン
begin 範囲の先頭を指すイテレータを取得する(function template) C++11
end 範囲の末尾の次を指すイテレータを取得する(function template) C++11
cbegin 範囲の先頭を指す読み取り専用イテレータを取得する(function template) C++14
cend 範囲の末尾の次を指す読み取り専用イテレータを取得する(function template) C++14
rbegin 範囲の末尾を指す逆イテレータを取得する(function template) C++14
rend 範囲の先頭の前を指す逆イテレータを取得する(function template) C++14
crbegin 範囲の末尾を指す読み取り専用逆イテレータを取得する(function template) C++14
crend 範囲の先頭の前を指す読み取り専用逆イテレータを取得する(function template) C++14

コンテナアクセス

名前 説明 対応バージョン
size コンテナの要素数を取得する (function) C++17
ssize コンテナの要素数を、符号付き整数型で取得する (function) C++20
empty コンテナが空かどうかを判定する (function) C++17
data コンテナの要素配列へのポインタを取得する (function) C++17

カスタマイゼーションポイントオブジェクト

名前 説明 対応バージョン
ranges::iter_move イテレータの指す要素をムーブする (customization point object) C++20
ranges::iter_swap 2つのイテレータの指す要素をswapする (customization point object) C++20

説明専用コンセプト

名前 説明 対応バージョン
with-reference Tに参照を付加する (alias template) C++20
can-reference with-reference可能 (concept) C++20
dereferenceable 単純な間接参照が可能 (concept) C++20
is-integer-like 符号付整数型と同等の型か否かを表す (variable template) C++20
is-signed-integer-like 符号なし整数型と同等の型か否かを表す (variable template) C++20

参照