Namespaces
Variants

std:: contiguous_iterator

From cppreference.net
Iterator library
Iterator concepts
contiguous_iterator
(C++20)


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>
(C++20以降)

contiguous_iterator コンセプトは、 random_access_iterator を改良し、示された要素がメモリ上で連続して格納されている保証を提供します。

contiguous_iterator をモデルとする型のイテレータ i 、センチネル s 、および非負整数 n が与えられたとき:

これは、プログラムが contiguous iterator i のデリファレンス、インクリメント、デクリメントによる副作用に依存できないことを意味する。なぜなら、標準ライブラリ関数が std:: to_address ( i ) によって取得されたポインタを操作し、 i を直接操作しない可能性があるためである。

(C++26 以降)

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++専門用語(Iterator concept determination、Semantic requirements、Equality preservation、Implicit expression variations、Notes、Defect reports、See also)は原文のまま保持しました - HTMLタグ、属性、クラス名、ID、リンク先は一切変更していません - 数値や書式設定は完全に保持されています

イテレータコンセプトの決定

この概念の定義は、説明専用のエイリアステンプレート /*ITER_CONCEPT*/ によって指定されます。

/*ITER_CONCEPT*/ < I > を決定するために、 ITER_TRAITS < I > を以下のように定義する: 特殊化 std:: iterator_traits < I > がプライマリテンプレートから生成されている場合は I を、それ以外の場合は std:: iterator_traits < I > を指す:

  • ITER_TRAITS < I > :: iterator_concept が有効かつ型を表す場合、 /*ITER_CONCEPT*/ < I > はその型を示す。
  • そうでなく、 ITER_TRAITS < I > :: iterator_category が有効かつ型を表す場合、 /*ITER_CONCEPT*/ < I > はその型を示す。
  • そうでなく、 std:: iterator_traits < I > がプライマリテンプレートから生成される場合、 /*ITER_CONCEPT*/ < I > std::random_access_iterator_tag を示す。
    (すなわち、 std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: contiguous_iterator_tag > false と仮定される。)
  • それ以外の場合、 /*ITER_CONCEPT*/ < I > は型を示さず、置換失敗となる。

セマンティック要件

a b dereferenceable なイテレータ、 c を型 I の非dereferenceableなイテレータとする。 b a から reachable であり、 c b からreachableであるとき、型 I contiguous_iterator をモデル化するのは、それが包含する全てのコンセプトがモデル化されており、以下の条件が全て満たされる場合に限る:

等価性保存

標準ライブラリコンセプトの requires expressions で宣言される式は、 equality-preserving であることが要求されます(特に明記されている場合を除く)。

暗黙的な式のバリエーション

定数左辺値オペランドに対して非変更式を使用する requires expression は、 暗黙的な式バリエーション も要求します。

注記

contiguous_iterator は、完全オブジェクト型へのすべてのポインタ型によってモデル化されます。

C++17で LegacyContiguousIterator 要件を満たすことが要求されていた標準ライブラリのイテレータ型は、C++20では contiguous_iterator コンセプトをモデル化することも要求されます。

不具合報告

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

DR 適用対象 公開時の動作 正しい動作
LWG 3607 C++20 contiguous_iterator はカスタムの
ranges::iter_move および ranges::iter_swap の動作を持つ可能性があった
禁止
LWG 4170 C++20 値初期化された contiguous_iterator のペアが
空の範囲を表現できない可能性があった
保証

関連項目

bidirectional_iterator がランダムアクセスイテレータであることを指定し、定数時間での前進と添字アクセスをサポートする
(コンセプト)