Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      operator-(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)
       
       
      template<std::sized_sentinel_for<I> I2,std::sized_sentinel_for<I> S2>

          requiresstd::sized_sentinel_for<S, I2>
      friendconstexprstd::iter_difference_t<I2>

          operator-(const common_iterator& x,conststd::common_iterator<I2, S2>& y);
      (since C++20)

      Computes the distance between two iterator adaptors. Two sentinels are considered equal.

      Letvar denote the underlyingstd::variant member object instd::common_iterator, the behavior is undefined if eitherx ory is invalid, i.e.x.var.valueless_by_exception()|| y.var.valueless_by_exception() istrue.

      This function template is not visible to ordinaryunqualified orqualified lookup, and can only be found byargument-dependent lookup when std::common_iterator<I> is an associated class of the arguments.

      Contents

      [edit]Parameters

      x, y - iterator adaptors to compute the difference of

      [edit]Return value

      • 0 ifx.var holds anS object andy.var holds anS2 object, i.e. both of them hold a sentinel.
      • Otherwise,alt_x- alt_y, wherealt_x andalt_y are the alternatives held byx.var andy.var, respectively (either two iterators or one iterator and one sentinel).

      [edit]Example

      Run this code
      #include <algorithm>#include <iostream>#include <iterator> int main(){int a[]{0,1,2,3,4,5}; using CI=std::common_iterator<std::counted_iterator<int*>,std::default_sentinel_t>;     CI i1{std::counted_iterator{a+1,2}};    CI i2{std::counted_iterator{a,3}};    CI s1{std::default_sentinel};    CI s2{std::default_sentinel}; std::cout<<(s2- s1)<<' '<<(i2- i1)<<' '<<(i1- s1)<<'\n';}

      Output:

      0 -1 -2

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3574C++20variant was fully constexpr (P2231R1) butcommon_iterator was notalso made constexpr

      [edit]See also

      advances thecommon_iterator
      (public member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/common_iterator/operator-&oldid=159361"

      [8]ページ先頭

      ©2009-2026 Movatter.jp