std::common_iterator
From cppreference.com
| ヘッダ <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アダプタであり、イテレータまたはセンチネルのいずれかを含み、適切な等価比較演算子operator==を定義することにより、共通ではない範囲(IとSの型が異なる場合)をcommon_rangeとして表現できます。
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) |
基になるイテレータまたはセンチネルを比較します (function template) |
| (C++20) |
2つのイテレータアダプタ間の距離を計算する (function template) |
| (C++20) |
基底イテレータの間接参照の結果を関連する右辺値参照型にキャストする (関数) |
| (C++20) |
2つの基底イテレータが指すオブジェクトをスワップする (関数テンプレート) |
[編集] ヘルパークラス
| std::common_iterator型の関連する差分型を計算します (class template specialization) | |
| 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 Common iterators [iterators.common]
- C++20 standard (ISO/IEC 14882:2020)
- 23.5.4 Common iterators [iterators.common]
[編集] 関連項目
| (C++20) |
rangeが同一のイテレータ型と番兵型を持つことを規定する (コンセプト) |
view を common_range に変換する(クラステンプレート) (rangeアダプタオブジェクト) |