Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      iter_swap(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::indirectly_swappable<I> I2,class S2>

      friendconstexprvoid
          iter_swap(const common_iterator& x,

                     conststd::common_iterator<I2, S2>& y)noexcept(/*see below*/);
      (since C++20)

      Swaps the objects pointed to by two underlying iterators. The behavior is undefined ifx does not hold anI object ory does not hold anI2 object (i.e. at least one ofx andy does not hold an iterator).

      The function body is equivalent toranges::iter_swap(std::get<I>(x.var), std::get<I2>(y.var)).

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

      Contents

      [edit]Parameters

      x, y - the iterators to the elements to swap

      [edit]Return value

      (none)

      [edit]Complexity

      Constant.

      [edit]Exceptions

      noexcept specification:  
      noexcept(noexcept(ranges::iter_swap(std::declval<const I&>(),std::declval<const I2&>())))

      [edit]Example

      Run this code
      #include <algorithm>#include <iostream>#include <iterator>#include <string>#include <vector> int main(){std::vector<std::string> v1{"1","2","3","4","5"},                             v2{"α","β","γ","δ","ε"}; using CI=std::common_iterator<std::counted_iterator<std::vector<std::string>::iterator>,std::default_sentinel_t>;     CI first1{std::counted_iterator{v1.begin(),3}};    CI first2{std::counted_iterator{v2.begin(),4}};    CI last{std::default_sentinel}; auto print=[&](auto rem){std::cout<< rem<<"v1 = ";        std::ranges::copy(v1,std::ostream_iterator<std::string>{std::cout," "});std::cout<<"\nv2 = ";        std::ranges::copy(v2,std::ostream_iterator<std::string>{std::cout," "});std::cout<<'\n';};     print("Before iter_swap:\n"); for(; first1!= last&& first2!= last;++first1,++first2)        iter_swap(first1, first2);// ADL     print("After iter_swap:\n");}

      Output:

      Before iter_swap:v1 = 1 2 3 4 5 v2 = α β γ δ ε After iter_swap:v1 = α β γ 4 5 v2 = 1 2 3 δ ε

      [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

      swaps the values of two objects
      (function template)[edit]
      swaps two ranges of elements
      (function template)[edit]
      swaps the elements pointed to by two iterators
      (function template)[edit]
      (C++20)
      swaps the values referenced by two dereferenceable objects
      (customization point object)[edit]
      (C++20)
      swaps the objects pointed to by two underlying iterators
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/common_iterator/iter_swap&oldid=159350"

      [8]ページ先頭

      ©2009-2025 Movatter.jp