名前空間
変種
操作

std::input_or_output_iterator

From cppreference.com
 
 
イテレータライブラリ
イテレータのコンセプト
input_or_output_iterator
(C++20)

イテレータのプリミティブ
アルゴリズムのコンセプトとユーティリティ
間接呼び出し可能コンセプト
共通アルゴリズム要件
(C++20)
(C++20)
(C++20)
ユーティリティ
(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< class I >

    concept input_or_output_iterator =
        requires(I i) {
            { *i } -> /*参照可能*/;
        } &&

        std::weakly_incrementable<I>;
(C++20以降)

input_or_output_iterator コンセプトは、イテレータの概念分類の基礎を形成します。すべてのイテレータ型は、input_or_output_iterator の要件を満たします。

公開用のみのコンセプト /*参照可能*/ は、その型が 参照可能である場合にのみ満たされます。

[編集] 注釈

input_or_output_iterator 自体は、イテレータのデリファレンスとインクリメントの操作のみを指定します。ほとんどのアルゴリズムでは、追加の操作が必要になります。たとえば、

LegacyIterator の要件とは異なり、input_or_output_iterator コンセプトはコピー可能性を要求しません。

*i は等価性を保持することが要求されますが、weakly_incrementable によって要求されるインクリメント操作はそうではありません。

[編集]

最小限のイテレータ。

#include <cstddef>
#include <iterator>
 
struct SimpleIterator
{
    using difference_type = std::ptrdiff_t;
 
    int operator*();
 
    SimpleIterator& operator++();
    void operator++(int) { ++*this; }
};
 
static_assert(std::input_or_output_iterator<SimpleIterator>);
English 日本語 中文(简体) 中文(繁體)