std:: basic_const_iterator
|
ヘッダーで定義
<iterator>
|
||
|
template
<
std::
input_iterator
Iter
>
class basic_const_iterator ; |
(C++23以降) | |
std::basic_const_iterator
は、基盤となるイテレータ(少なくとも
LegacyInputIterator
または
input_iterator
を満たすもの)とまったく同じように動作するイテレータアダプタであり、唯一の違いは、間接参照時に基盤イテレータが返す値を不変として変換することです。
std::basic_const_iterator
の特殊化は定数イテレータであり、つまり要素の変更が許可されないため、このイテレータを出力イテレータとして使用することは決してできません。
目次 |
メンバー型
| メンバー型 | 定義 |
iterator_category
(条件付きで存在) |
それ以外の場合、メンバー
|
iterator_concept
|
|
value_type
|
std:: iter_value_t < Iter > |
difference_type
|
std:: iter_difference_t < Iter > |
reference
(private)
|
std::
iter_const_reference_t
<
Iter
>
( 説明専用メンバー型* ) |
メンバーオブジェクト
| メンバー名 | 定義 |
current
(private)
|
base()
がコピーまたはムーブする元となる基盤イテレータ
( 説明専用メンバーオブジェクト* ) |
メンバー関数
新しい
basic_const_iterator
を構築する
(public member function) |
|
|
基となるイテレータにアクセスする
(public member function) |
|
|
指し示す要素にアクセスする
(public member function) |
|
|
インデックスによる要素へのアクセス
(public member function) |
|
|
イテレータを進める、または戻す
(public member function) |
|
|
基となるイテレータが変換可能な任意の定数イテレータに変換する
(public member function) |
|
|
基となるイテレータを比較する
(public member function) |
非メンバー関数
basic_const_iterator
と非
basic_const_iterator
を比較する
(関数テンプレート) |
|
|
(C++23)
|
イテレータを進める、または戻す
(関数テンプレート) |
|
(C++23)
|
2つのイテレータアダプタ間の距離を計算する
(関数テンプレート) |
|
(C++23)
|
基盤となるイテレータのデリファレンス結果を、関連付けられた右辺値参照型にキャストする
(関数) |
ヘルパークラス
イテレータと適応された
basic_const_iterator
型の共通型を決定する
(クラステンプレートの特殊化) |
ヘルパーエイリアステンプレート
|
template
<
std::
input_iterator
I
>
using const_iterator = /* 説明を参照 */ ; |
(C++23以降) | |
I
が
constant-iterator
(説明専用コンセプト)をモデルする場合、
const_iterator
<
I
>
は型
I
を表す。それ以外の場合、
basic_const_iterator
<
I
>
となる。
|
template
<
std::
semiregular
S
>
using const_sentinel = /* 説明を参照 */ ; |
(C++23以降) | |
S
が
input_iterator
をモデル化する場合、
const_sentinel
<
S
>
は型
const_iterator
<
S
>
を表します。それ以外の場合、
S
です。
ヘルパー関数テンプレート
|
template
<
std::
input_iterator
T
>
constexpr const_iterator < T > make_const_iterator ( I it ) { return it ; } |
(C++23以降) | |
|
template
<
std::
semiregular
S
>
constexpr const_sentinel < S > make_const_sentinel ( S s ) { return s ; } |
(C++23以降) | |
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_ranges_as_const
|
202207L
|
(C++23) |
std::basic_const_iterator
|
202311L
|
(C++23)
(DR) |
std::basic_const_iterator
はその基となる型の変換可能性に従うべき
|
例
#include <cassert> #include <iterator> #include <vector> int main() { std::vector v{1, 2, 3}; std::vector<int>::iterator i = v.begin(); *i = 4; // OK、v[0] は 4 になる i[1] = 4; // OK、*(i + 1) = 4; と同じ auto ci = std::make_const_iterator(i); assert(*ci == 4); // OK、基盤オブジェクトを読み取り可能 assert(ci[0] == 4); // OK、同上 // *ci = 13; // エラー: 読み取り専用ロケーション // ci[0] = 13; // エラー: 同上 ci.base()[0] = 42; // OK、基盤イテレータは書き込み可能 assert(*ci == 42); // OK、基盤ロケーション v[0] が変更された }
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| P2836R1 | C++23 |
basic_const_iterator
が基底型の変換可能性に従わない
|
変換演算子が提供される |