名前空間
変種
操作

std::contiguous_iterator

From cppreference.com
 
 
イテレータライブラリ
イテレータのコンセプト
contiguous_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 contiguous_iterator =
        std::random_access_iterator<I> &&
        std::derived_from</*ITER_CONCEPT*/<I>, std::contiguous_iterator_tag> &&
        std::is_lvalue_reference_v<std::iter_reference_t<I>> &&
        std::same_as<std::iter_value_t<I>,
                     std::remove_cvref_t<std::iter_reference_t<I>>> &&
        requires(const I& i) {
            { std::to_address(i) } ->
              std::same_as<std::add_pointer_t<std::iter_reference_t<I>>>;

        };
(C++20以降)

contiguous_iterator concept は、random_access_iterator を拡張し、要素がメモリ内に連続して格納されていることを保証します。

目次

[編集] イテレータコンセプトの決定

このコンセプトの定義は、展示専用のエイリアステンプレート /*ITER_CONCEPT*/ を介して指定されます。

/*ITER_CONCEPT*/<I> を決定するために、特殊化 std::iterator_traits<I> がプライマリテンプレートから生成される場合、またはそれ以外の場合に ITER_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 を表します。
  • そうでなければ、/*ITER_CONCEPT*/<I> は型を表さず、置換失敗となります。

[edit] セマンティック要件

abdereferenceable なイテレータ、c を非 dereferenceable なイテレータとし、型 Icontiguous_iterator をモデルとするのは、それが包含するすべてのコンセプトがモデル化され、かつ以下の条件がすべて満たされる場合です。ここで、ba から reachable であり、cb から reachable であるとします。

[編集] 等価性保持

標準ライブラリのコンセプトのrequiresで宣言された式は、(特に明記されていない限り)等価性保持である必要があります。

[編集] 暗黙の式バリエーション

一部の定数左辺値オペランドに対して非変更的である式を使用するrequiresは、暗黙の式バリエーションも必要とする。

[edit] 注釈

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

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

[edit] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 3607 C++20 contiguous_iterator はカスタム
ranges::iter_move および ranges::iter_swap の動作を持つことができます。
禁止された
LWG 4170 C++20 値初期化された contiguous_iterator のペア
は、空の範囲を表せない場合があります。
保証された

[edit] 関連項目

bidirectional_iterator が、定数時間での移動と添字演算をサポートするランダムアクセスイテレータであることを規定する
(コンセプト) [編集]
English 日本語 中文(简体) 中文(繁體)