std:: common_iterator
|
定義ヘッダ
<iterator>
|
||
|
template
<
std::
input_or_output_iterator
I,
std::
sentinel_for
<
I
>
S
>
requires
(
!
std::
same_as
<
I, S
>
&&
std::
copyable
<
I
>
)
|
(C++20以降) | |
std::common_iterator
は、イテレータ
I
とセンチネル
S
のアダプタであり、非共通範囲(
I
と
S
の型が異なる場合)を
common_range
として表現することができます。これは、イテレータまたはセンチネルのいずれかを含み、適切な等価比較演算子
operator
==
を定義することによって実現されます。
std::common_iterator
は、イテレータ/センチネルペアで表現されるシーケンスと、
common_range
のようなシーケンスを期待するレガシー関数との間の「ブリッジ」として使用できます。
目次 |
データメンバ
| メンバー名 | 定義 |
var
|
std::
variant
<
I, S
>
型のオブジェクト
( 説明専用メンバーオブジェクト* ) |
メンバー関数
common_iterator
を新しく構築する
(public member function) |
|
別の
common_iterator
を代入する
(public member function) |
|
|
指し示す要素にアクセスする
(public member function) |
|
common_iterator
を進める
(public member function) |
非メンバ関数
|
(C++20)
|
基底のイテレータまたはセンチネルを比較する
(関数テンプレート) |
|
(C++20)
|
2つのイテレータアダプタ間の距離を計算する
(関数テンプレート) |
|
(C++20)
|
基底イテレータの間接参照結果を関連する右辺値参照型にキャストする
(関数) |
|
(C++20)
|
2つの基底イテレータが指すオブジェクトを交換する
(関数テンプレート) |
ヘルパークラス
|
std::common_iterator
型の関連する差型を計算する
(クラステンプレートの特殊化) |
|
|
std::common_iterator
型のプロパティに対する統一インターフェースを提供する
(クラステンプレートの特殊化) |
例
#include <algorithm> #include <iostream> #include <iterator> #include <list> #include <string> template<class ForwardIter> void fire(ForwardIter first, ForwardIter last) { std::copy(first, last, std::ostream_iterator<std::string>{std::cout, " "}); } int main() { std::list<std::string> stars{"Pollux", "Arcturus", "Mira", "Aldebaran", "Sun"}; using IT = std::common_iterator< std::counted_iterator<std::list<std::string>::iterator>, std::default_sentinel_t>; fire(IT(std::counted_iterator(stars.begin(), stars.size() - 1)), IT(std::default_sentinel)); }
出力:
Pollux Arcturus Mira Aldebaran
参考文献
- C++23標準 (ISO/IEC 14882:2024):
-
- 23.5.5 共通イテレータ [iterators.common]
- C++20標準 (ISO/IEC 14882:2020):
-
- 23.5.4 共通イテレータ [iterators.common]
関連項目
|
(C++20)
|
範囲が同一のイテレータ型とセンチネル型を持つことを指定する
(コンセプト) |
view
を
common_range
に変換する
(クラステンプレート) (範囲アダプタオブジェクト) |