Skip to content

Latest commit

 

History

History
200 lines (161 loc) · 19 KB

iterator.md

File metadata and controls

200 lines (161 loc) · 19 KB

iterator

  • iterator[meta header]

<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
iter_const_reference_t イテレータの参照型(iter_reference_t)をconst化したものを取得する (alias template) C++23
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)

定数イテレータ

名前 説明 対応バージョン
basic_const_iterator イテレータの要素をconst化するラッパーイテレータ(class template) C++23
const_iterator 要素がconst化されたイテレータ型を取得する (alias template) C++23
const_sentinel 要素がconst化された番兵型を取得する (alias template) C++23
make_const_iterator const_iteratorオブジェクトを作るヘルパ関数(function template) C++23
make_const_sentinel const_sentinelオブジェクトを作るヘルパ関数(function template) C++23

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

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

番兵型

名前 説明 対応バージョン
default_sentinel_t 任意の範囲の終端を表すことのできるデフォルトの番兵型(class template) C++20
default_sentinel 任意の範囲の終端を表すことのできるデフォルトの番兵オブジェクト(constant variable) C++20
unreachable_sentinel_t 別の方法で終端が指定される範囲の仮想的な終端を表す番兵型(class template) C++20
unreachable_sentinel 別の方法で終端が指定される範囲の仮想的な終端を表す番兵オブジェクト(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

参照