Namespaces
Variants

C++ named requirements: LegacyIterator

From cppreference.net
C++ named requirements

LegacyIterator 要件は、コンテナの要素を識別および走査するために使用できる型を記述します。

LegacyIterator は、他のイテレータ型によって使用される基本要件セットです: LegacyInputIterator LegacyOutputIterator LegacyForwardIterator LegacyBidirectionalIterator 、および LegacyRandomAccessIterator 。イテレータはポインタの抽象化として考えることができます。

イテレータの全カテゴリは、そのカテゴリに対して償却定数時間で実現可能な関数のみを要求します。したがって、イテレータの要件表 およびコンセプト定義 (C++20以降) は計算量を規定しません。

目次

要件

It は、以下の条件を満たす場合に LegacyIterator を満たす

  • It CopyConstructible を満たし、かつ
  • It CopyAssignable を満たし、かつ
  • It Destructible を満たし、かつ
  • It Swappable を満たし、かつ
  • std:: iterator_traits < It > は以下のメンバー型定義を持つ: value_type , (C++20以前) difference_type , reference , pointer , および iterator_category 、かつ
  • r (型 It の左辺値)が与えられたとき、以下の式は有効であり、指定された効果を持たなければならない:
戻り値の型 事前条件
* r 未規定 r 間接参照可能
++ r It & r インクリメント可能 (式 ++ r の動作が定義されている)

Concept

std::iterator_traits の定義のために、以下の説明専用コンセプトが定義される。

template < class I >

concept __LegacyIterator =
requires ( I i )
{
{ * i } - > __Referenceable ;
{ ++ i } - > std:: same_as < I & > ;
{ * i ++ } - > __Referenceable ;

} && std:: copyable < I > ;

ここで、説明専用コンセプト __Referenceable < T > は、 T & が有効な型である場合にのみ満たされる(特に、 T void であってはならない)。

(C++20以降)

注記

用語に関する注意:以下の表は、このサイトで使用されている名称と対応するC++標準の名称(同じ意味を持つ)を示しています。 「Legacy」(および「Cpp17」)接頭辞は、C++20以前の標準との互換性を強調し、これらの要件をC++20で導入された新しい iterator concepts と区別するために使用されます。

cppreference 名称 C++ 標準名 C++20 イテレータコンセプト
LegacyIterator Cpp17Iterator input_or_output_iterator
LegacyInputIterator Cpp17InputIterator input_iterator
LegacyOutputIterator Cpp17OutputIterator output_iterator
LegacyForwardIterator Cpp17ForwardIterator forward_iterator
LegacyBidirectionalIterator Cpp17BidirectionalIterator bidirectional_iterator
LegacyRandomAccessIterator Cpp17RandomAccessIterator random_access_iterator
LegacyContiguousIterator [1] contiguous_iterator
  1. LegacyContiguousIterator カテゴリはC++17で初めて正式に規定されたが、 std::vector std::basic_string std::array 、および std::valarray のイテレータ、ならびにC配列へのポインタは、C++17以前のコードではしばしば別個のカテゴリとして扱われていた。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2437 C++98 * r reference であることが要求される 出力イテレータでは要求されない
LWG 3420 C++20 説明専用コンセプトは最初に copyable をチェックする copyable はrequires式がtrueを返す場合にのみチェックされる

関連項目

型のオブジェクトがインクリメントおよびデリファレンス可能であることを指定する
(コンセプト)
Iterator library イテレータ、イテレータ特性、アダプタ、およびユーティリティ関数の定義を提供する