名前空間
変種
操作

名前付き要件:LegacyIterator

提供: cppreference.com
< cpp‎ | named req
 
 
 

LegacyIterator 要件はコンテナの要素を識別および巡回するために使用できる型を表します。

LegacyIterator は他のイテレータ型 LegacyInputIteratorLegacyOutputIteratorLegacyForwardIteratorLegacyBidirectionalIterator および LegacyRandomAccessIterator によって使用される要件の基礎集合です。 イテレータはポインタの抽象化として考えることができます。

目次

[編集]要件

以下の内容を満たす場合、型 ItLegacyIterator を満たします。

さらに、

  • It 型の左辺値 r

が与えられたとき、以下の式が有効でなければならず、規定された効果を持たなければなりません。

戻り値の型事前条件
*r未規定 r逆参照可能である (下を参照)
++rIt&rインクリメント可能である (式 ++r の動作が定義されている)

[編集]逆参照可能なイテレータ

*i の動作が定義されているイテレータは逆参照可能と呼ばれます。

以下の場合、イテレータは逆参照可能でありません。

  • 終端イテレータ (配列の最後の要素の次のポインタを含む) または先頭より前のイテレータである。 そのようなイテレータは特定の実装では逆参照可能かもしれませんが、そういったことをライブラリが仮定することはありません。
  • 単数イテレータ、つまり、いかなるシーケンスにも紐付いていないイテレータである。 ヌルポインタやデフォルト構築されたポインタ (不定値を持つ) は単数です。
  • 参照するシーケンスに対するイテレータを無効化する操作によって無効化されたイテレータである。

コンセプト

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

template<class I>

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

  };

ただし、説明専用コンセプト __Referenceable<T>T& が有効な型である場合にのみ満たされます (特に、 Tvoid であってはなりません)。

(C++20以上)

[編集]関連項目

その型のオブジェクトがインクリメント可能かつ逆参照可能であることを指定します
(コンセプト)[edit]
close