Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::iterator_traits<std::common_iterator>

      From cppreference.com
      <cpp‎ |iterator‎ |common iterator
       
       
      Iterator library
      Iterator concepts
      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<std::input_iterator I,class S>
      struct iterator_traits<std::common_iterator<I, S>>;
      (since C++20)

      Provides the uniform interface to the properties of thestd::common_iterator type.

      Contents

      [edit]Member types

      Type name Definition
      iterator_concept
      iterator_category
      (conditionally present)
      value_typestd::iter_value_t<I>
      difference_typestd::iter_difference_t<I>
      pointer
      • decltype(c.operator->()), if it is well-formed (wherec is an lvalue of typeconststd::common_iterator<I, S>).
      • void otherwise.
      referencestd::iter_reference_t<I>

      [edit]Example

      Run this code
      #include <iterator>#include <type_traits>#include <vector> int main(){std::vector v{1,2,3,4};using CV=std::common_iterator<std::counted_iterator<std::vector<int>::iterator>,std::default_sentinel_t>;    CV i{std::counted_iterator{v.begin(),3}};using TRCV=std::iterator_traits<decltype(i)>;    static_assert(std::is_same<TRCV::iterator_concept,std::forward_iterator_tag>());    static_assert(std::is_same<TRCV::iterator_category,std::forward_iterator_tag>());    static_assert(std::is_same<TRCV::value_type,int>());    static_assert(std::is_same<TRCV::difference_type,std::vector<int>::difference_type>());    static_assert(std::is_same<TRCV::pointer, decltype(i.operator->())>());    static_assert(std::is_same<TRCV::reference,int&>());     CV s{std::default_sentinel};using TRCS=std::iterator_traits<decltype(s)>;    static_assert(std::is_same<TRCS::iterator_concept,std::forward_iterator_tag>());    static_assert(std::is_same<TRCS::iterator_category,std::forward_iterator_tag>());    static_assert(std::is_same<TRCS::value_type,int>());    static_assert(std::is_same<TRCS::difference_type,std::vector<int>::difference_type>());    static_assert(std::is_same<TRCS::pointer, decltype(s.operator->())>());    static_assert(std::is_same<TRCS::reference,int&>());}

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3749C++20ifstd::iter_difference_t<I> is not an integer type,
      iterator_category wasstd::input_iterator_tag
      iterator_category is
      undefined in this case

      [edit]See also

      provides uniform interface to the properties of an iterator
      (class template)[edit]
      computes the associated difference type of thestd::common_iterator type
      (class template specialization)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/common_iterator/iterator_traits&oldid=173607"

      [8]ページ先頭

      ©2009-2026 Movatter.jp