- iterator[meta header]
<iterator>
ヘッダでは、イテレータに関する機能群を提供する。
イテレータは日本語では反復子とも呼ばれ、配列やコンテナのような範囲を横断する手段として使用できる。
C++標準ライブラリのイテレータは、以下のように階層的に定義される。 この階層はC++言語機能の継承と同じように見なせる。たとえば、入力イテレータと前方向イテレータはis a関係が成り立っており、前方向イテレータは入力イテレータと見なすことができる。
C++20以降の標準ライブラリでは、任意のイテレータに対して可能な操作によって上記5つに隣接イテレータ(contiguous iterator)を加えた6つのイテレータカテゴリを定義する。それぞれ次のイテレータコンセプトが対応する。
- 入力イテレータ :
input_iterator
- 出力イテレータ :
output_iterator
- 前方向イテレータ :
forward_iterator
- 双方向イテレータ :
bidirectional_iterator
- ランダムアクセスイテレータ :
random_access_iterator
- 隣接イテレータ :
contiguous_iterator
このヘッダでは、以下の標準ヘッダをインクルードする:
<concepts>
(C++20)<compare>
(C++20)
名前 | 説明 | 対応バージョン |
---|---|---|
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_type とreference_type のcommon_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 |
イテレータI のProj による射影操作の結果を表すことのできる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 |