Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::iter_swap

      From cppreference.com
      <cpp‎ |algorithm
       
       
      Algorithm library
      Constrained algorithms and algorithms on ranges(C++20)
      Constrained algorithms, e.g.ranges::copy,ranges::sort, ...
      Execution policies(C++17)
      Sorting and related operations
      Partitioning operations
      Sorting operations
      Binary search operations
      (on partitioned ranges)
      Set operations (on sorted ranges)
      Merge operations (on sorted ranges)
      Heap operations
      Minimum/maximum operations
      (C++11)
      (C++17)
      Lexicographical comparison operations
      Permutation operations
      C library
      Numeric operations
      Operations on uninitialized memory
       
      Defined in header<algorithm>
      template<class ForwardIt1,class ForwardIt2>
      void iter_swap( ForwardIt1 a, ForwardIt2 b);
      (constexpr since C++20)

      Swaps the values of the elements the given iterators are pointing to.

      If any of the following conditions is satisfied, the behavior is undefined:

      Contents

      [edit]Parameters

      a, b - iterators to the elements to swap
      Type requirements
      -
      ForwardIt1, ForwardIt2 must meet the requirements ofLegacyForwardIterator.

      [edit]Return value

      (none)

      [edit]Complexity

      Constant.

      [edit]Notes

      This function template models the semantics of the swap operation given bySwappable. That is, overloads ofswap found byADL and the fall back ofstd::swap are considered.

      [edit]Possible implementation

      template<class ForwardIt1,class ForwardIt2>constexpr//< since C++20void iter_swap(ForwardIt1 a, ForwardIt2 b){usingstd::swap;    swap(*a,*b);}

      [edit]Example

      The following is an implementation of selection sort in C++.

      Run this code
      #include <algorithm>#include <iostream>#include <random>#include <string_view>#include <vector> template<class ForwardIt>void selection_sort(ForwardIt begin, ForwardIt end){for(ForwardIt it= begin; it!= end;++it)        std::iter_swap(it,std::min_element(it, end));} void println(std::string_view rem,std::vector<int>const& v){std::cout<< rem;for(int e: v)std::cout<< e<<' ';std::cout<<'\n';} template<int min,int max>int rand_int(){staticstd::uniform_int_distribution dist(min, max);staticstd::mt19937 gen(std::random_device{}());return dist(gen);} int main(){std::vector<int> v;std::generate_n(std::back_inserter(v),20, rand_int<-9,+9>); std::cout<<std::showpos;    println("Before sort: ", v);    selection_sort(v.begin(), v.end());    println("After sort:  ", v);}

      Possible output:

      Before sort: -9 -3 +2 -8 +0 -1 +8 -4 -5 +1 -4 -5 +4 -9 -8 -6 -6 +8 -4 -6 After sort:  -9 -9 -8 -8 -6 -6 -6 -5 -5 -4 -4 -4 -3 -1 +0 +1 +2 +4 +8 +8

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 187C++98it was unspecified whetherswap is usedthe effect is equivalent toswap(*a,*b)

      [edit]See also

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

      [8]ページ先頭

      ©2009-2025 Movatter.jp