Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::contiguous_iterator

      From cppreference.com
      <cpp‎ |iterator
       
       
      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)
       
      Defined in header<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>>>;

             };
      (since C++20)

      Thecontiguous_iterator concept refinesrandom_access_iterator by providing a guarantee the denoted elements are stored contiguously in the memory.

      Given an iteratori of a type that modelscontiguous_iterator, a sentinels and a non-negative integern:

      This means a program cannot rely on any side effects of dereferencing, incrementing or decrementing a contiguous iteratori, because standard library functions might operate on pointers obtained bystd::to_address(i) instead of operating oni directly.

      (since C++26)

      Contents

      [edit]Iterator concept determination

      Definition of this concept is specified via an exposition-only alias template/*ITER_CONCEPT*/.

      In order to determine/*ITER_CONCEPT*/<I>, letITER_TRAITS<I> denoteI if the specializationstd::iterator_traits<I> is generated from the primary template, orstd::iterator_traits<I> otherwise:

      • IfITER_TRAITS<I>::iterator_concept is valid and names a type,/*ITER_CONCEPT*/<I> denotes the type.
      • Otherwise, ifITER_TRAITS<I>::iterator_category is valid and names a type,/*ITER_CONCEPT*/<I> denotes the type.
      • Otherwise, ifstd::iterator_traits<I> is generated from the primary template,/*ITER_CONCEPT*/<I> denotesstd::random_access_iterator_tag.
        (That is,std::derived_from</*ITER_CONCEPT*/<I>,std::contiguous_iterator_tag> is assumed to befalse.)
      • Otherwise,/*ITER_CONCEPT*/<I> does not denote a type and results in a substitution failure.

      [edit]Semantic requirements

      Leta andb bedereferenceable iterators andc be a non-dereferenceable iterator of typeI such thatb isreachable froma andc is reachable fromb, the typeI modelscontiguous_iterator only if all the concepts it subsumes are modeled and all following conditions are satisfied:

      [edit]Equality preservation

      Expressions declared inrequires expressions of the standard library concepts are required to beequality-preserving (except where stated otherwise).

      [edit]Implicit expression variations

      Arequires expression that uses an expression that is non-modifying for some constant lvalue operand also requiresimplicit expression variations.

      [edit]Notes

      contiguous_iterator is modeled by every pointer type to complete object type.

      Iterator types in the standard library that are required to satisfy theLegacyContiguousIterator requirements in C++17 are also required to modelcontiguous_iterator in C++20.

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3607C++20contiguous_iterator could have custom
      ranges::iter_move andranges::iter_swap behaviors
      prohibited
      LWG 4170C++20a pair of value-initializedcontiguous_iterators
      might not be able to represent an empty range
      guaranteed

      [edit]See also

      specifies that abidirectional_iterator is a random-access iterator, supporting advancement in constant time and subscripting
      (concept)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/contiguous_iterator&oldid=182195"

      [8]ページ先頭

      ©2009-2025 Movatter.jp