名前空間
変種
操作

std::common_iterator

From cppreference.com
 
 
イテレータライブラリ
イテレータのコンセプト
イテレータのプリミティブ
アルゴリズムのコンセプトとユーティリティ
間接呼び出し可能コンセプト
共通アルゴリズム要件
(C++20)
(C++20)
(C++20)
ユーティリティ
(C++20)
イテレータアダプタ
common_iterator
(C++20)

Rangeアクセス
(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アダプタであり、イテレータまたはセンチネルのいずれかを含み、適切な等価比較演算子operator==を定義することにより、共通ではない範囲(ISの型が異なる場合)を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) [編集]

[編集] 非メンバ関数

基になるイテレータまたはセンチネルを比較します
(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]

[編集] 関連項目

rangeが同一のイテレータ型と番兵型を持つことを規定する
(コンセプト) [編集]
viewcommon_range に変換する
(クラステンプレート) (rangeアダプタオブジェクト)[編集]
English 日本語 中文(简体) 中文(繁體)