Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::basic_const_iterator

      From cppreference.com
      <cpp‎ |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
      basic_const_iterator
      (C++23)
      const_iterator
      (C++23)
      const_sentinel
      (C++23)
      make_const_iterator
      (C++23)
      make_const_sentinel
      (C++23)

      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 Iter>
      class basic_const_iterator;
      (since C++23)

      std::basic_const_iterator is an iterator adaptor which behaves exactly like the underlying iterator (which must be at least anLegacyInputIterator or modelinput_iterator), except that dereferencing converts the value returned by the underlying iterator as immutable. Specializations ofstd::basic_const_iterator are constant iterators, that is, the iterator can never be used as an output iterator because modifying elements is not allowed.

      Contents

      [edit]Member types

      Member type Definition
      iterator_category
      (conditionally present)

      IfIter modelsforward_iterator:

      Otherwise, there is no memberiterator_category.

      iterator_concept
      value_typestd::iter_value_t<Iter>
      difference_typestd::iter_difference_t<Iter>
      reference(private)std::iter_const_reference_t<Iter>
      (exposition-only member type*)

      [edit]Member objects

      Member name Definition
      current(private) the underlying iterator from whichbase() copies or moves
      (exposition-only member object*)

      [edit]Member functions

      constructs a newbasic_const_iterator
      (public member function)[edit]
      accesses the underlying iterator
      (public member function)[edit]
      accesses the pointed-to element
      (public member function)[edit]
      accesses an element by index
      (public member function)[edit]
      advances or decrements the iterator
      (public member function)[edit]
      converts into any constant iterator to which an underlying iterator can be convertible
      (public member function)[edit]
      compares the underlying iterators
      (public member function)[edit]

      [edit]Non-member functions

      comparesbasic_const_iterator with non-basic_const_iterator
      (function template)[edit]
      advances or decrements the iterator
      (function template)[edit]
      (C++23)
      computes the distance between two iterator adaptors
      (function template)[edit]
      (C++23)
      casts the result of dereferencing the underlying iterator to its associated rvalue reference type
      (function)[edit]

      [edit]Helper classes

      determines the common type of an iterator and an adaptedbasic_const_iterator type
      (class template specialization)[edit]

      [edit]Helper alias templates

      template<std::input_iterator I>
      using const_iterator=/* see description */;
      (since C++23)

      IfI modelsconstant-iterator (an exposition-only concept), thenconst_iterator<I> denotes a typeI. Otherwise,basic_const_iterator<I>.

      template<std::semiregular S>
      using const_sentinel=/* see description */;
      (since C++23)

      IfS modelsinput_iterator, thenconst_sentinel<S> denotes a typeconst_iterator<S>. Otherwise,S.

      [edit]Helper function templates

      template<std::input_iterator T>
      constexpr const_iterator<T> make_const_iterator( I it){return it;}
      (since C++23)
      template<std::semiregular S>
      constexpr const_sentinel<S> make_const_sentinel( S s){return s;}
      (since C++23)

      [edit]Notes

      Feature-test macroValueStdFeature
      __cpp_lib_ranges_as_const202207L(C++23)std::basic_const_iterator
      202311L(C++23)
      (DR)
      std::basic_const_iterator should follow its underlying type's convertibility

      [edit]Example

      Run this code
      #include <cassert>#include <iterator>#include <vector> int main(){std::vector v{1,2,3};std::vector<int>::iterator i= v.begin();*i=4;// OK, v[0] == 4 now    i[1]=4;// OK, the same as *(i + 1) = 4; auto ci=std::make_const_iterator(i);assert(*ci==4);// OK, can read the underlying objectassert(ci[0]==4);// OK, ditto// *ci = 13;        // Error: location is read-only// ci[0] = 13;      // Error: ditto    ci.base()[0]=42;// OK, underlying iterator is writableassert(*ci==42);// OK, underlying location v[0] was modified}

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      P2836R1C++23basic_const_iterator doesn't follow its underlying type's convertibilityconversion operator provided
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/basic_const_iterator&oldid=175482"

      [8]ページ先頭

      ©2009-2025 Movatter.jp