Namespaces
Variants

std:: common_iterator

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
定義ヘッダ <iterator>
template < std:: input_or_output_iterator I, std:: sentinel_for < I > S >

requires ( ! std:: same_as < I, S > && std:: copyable < I > )

class common_iterator ;
(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]

関連項目

範囲が同一のイテレータ型とセンチネル型を持つことを指定する
(コンセプト)
view common_range に変換する
(クラステンプレート) (範囲アダプタオブジェクト)