Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      operator==,!=,<,<=,>,>=,<=>(std::reverse_iterator)

      From cppreference.com
      <cpp‎ |iterator‎ |reverse 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<class Iter1,class Iter2>

      bool operator==(conststd::reverse_iterator<Iter1>& lhs,

                       conststd::reverse_iterator<Iter2>& rhs);
      (1)(constexpr since C++17)
      template<class Iter1,class Iter2>

      bool operator!=(conststd::reverse_iterator<Iter1>& lhs,

                       conststd::reverse_iterator<Iter2>& rhs);
      (2)(constexpr since C++17)
      template<class Iter1,class Iter2>

      bool operator<(conststd::reverse_iterator<Iter1>& lhs,

                       conststd::reverse_iterator<Iter2>& rhs);
      (3)(constexpr since C++17)
      template<class Iter1,class Iter2>

      bool operator<=(conststd::reverse_iterator<Iter1>& lhs,

                       conststd::reverse_iterator<Iter2>& rhs);
      (4)(constexpr since C++17)
      template<class Iter1,class Iter2>

      bool operator>(conststd::reverse_iterator<Iter1>& lhs,

                       conststd::reverse_iterator<Iter2>& rhs);
      (5)(constexpr since C++17)
      template<class Iter1,class Iter2>

      bool operator>=(conststd::reverse_iterator<Iter1>& lhs,

                       conststd::reverse_iterator<Iter2>& rhs);
      (6)(constexpr since C++17)
      template<class Iter1,std::three_way_comparable_with<Iter1> Iter2>

      constexprstd::compare_three_way_result_t<Iter1, Iter2>
          operator<=>(conststd::reverse_iterator<Iter1>& lhs,

                       conststd::reverse_iterator<Iter2>& rhs);
      (7)(since C++20)

      Compares the underlying iterators oflhs andrhs.

      • The result of equality comparisons are preserved (i.e. equal underlying iterators imply equal reverse iterators).
      • The result of relational comparisons are reversed (i.e. a greater underlying iterator implies a lesser reverse iterator).
      1) This overload participates in overload resolution only iflhs.base()== rhs.base() is well-formed and convertible tobool.
      2) This overload participates in overload resolution only iflhs.base()!= rhs.base() is well-formed and convertible tobool.
      3) This overload participates in overload resolution only iflhs.base()> rhs.base() is well-formed and convertible tobool.
      4) This overload participates in overload resolution only iflhs.base()>= rhs.base() is well-formed and convertible tobool.
      5) This overload participates in overload resolution only iflhs.base()< rhs.base() is well-formed and convertible tobool.
      6) This overload participates in overload resolution only iflhs.base()<= rhs.base() is well-formed and convertible tobool.
      (since C++20)


      Contents

      [edit]Parameters

      lhs, rhs - iterator adaptors to compare

      [edit]Return value

      1)lhs.base()== rhs.base()
      2)lhs.base()!= rhs.base()
      3)lhs.base()> rhs.base()
      4)lhs.base()>= rhs.base()
      5)lhs.base()< rhs.base()
      6)lhs.base()<= rhs.base()
      7)rhs.base()<=> lhs.base()

      [edit]Notes

      operator<=> returnsrhs.base()<=> lhs.base() rather thanlhs.base()<=> rhs.base() because this is a reverse iterator.

      [edit]Example

      Run this code
      #include <cassert>#include <iterator> int main(){int a[]{0,1,2,3};//            ↑  └───── x, y//            └──────── z// “x” and “y” are equal, but “x” is less than “z” (reversely)std::reverse_iterator<int*>        x{std::rend(a)-std::size(a)},        y{std::rend(a)-std::size(a)},        z{std::rbegin(a)+1}; // two-way comparisonsassert(  x== y);assert(!(x!= y));assert(!(x<  y));assert(  x<= y);assert(!(x== z));assert(  x!= z);assert(  x<  z);assert(  x<= z); // three-way comparisonsassert(  x<=> y==0);assert(!(x<=> y<0));assert(!(x<=> y>0));assert(!(x<=> z==0));assert(  x<=> z<0);assert(!(x<=> z>0));}

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 280C++98heterogeneous assignment was not allowedallowed
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/reverse_iterator/operator_cmp&oldid=177504"

      [8]ページ先頭

      ©2009-2025 Movatter.jp