Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::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>
      (until C++11)
      Defined in header<utility>
      (since C++11)
      Defined in header<string_view>
      template<class T>
      void swap( T& a, T& b);
      (1)(conditionally noexcept since C++11)
      (constexpr since C++20)
      template<class T2,std::size_t N>
      void swap( T2(&a)[N], T2(&b)[N]);
      (2)(conditionally noexcept since C++11)
      (constexpr since C++20)

      Exchanges the given values.

      1) Swaps the valuesa andb.

      This overload participates in overload resolution only ifstd::is_move_constructible_v<T>&&std::is_move_assignable_v<T> istrue.

      (since C++17)
      2) Swaps the arraysa andb. Equivalent tostd::swap_ranges(a, a+ N, b).

      This overload participates in overload resolution only ifstd::is_swappable_v<T2> istrue.

      (since C++17)

      Contents

      [edit]Parameters

      a, b - the values to be swapped
      Type requirements
      -
      T must meet the requirements ofCopyConstructible andCopyAssignable(until C++11)MoveConstructible andMoveAssignable(since C++11).
      -
      T2 must meet the requirements ofSwappable.

      [edit]Return value

      (none)

      [edit]Exceptions

      1)

      (none)

      (until C++11)
      noexcept specification:  
      (since C++11)
      2)
      noexcept specification:  
      noexcept(noexcept(swap(*a,*b)))
      The lookup for the identifierswap in the exception specification finds this function template in addition to anything found by the usual lookup rules, making the exception specification equivalent to C++17std::is_nothrow_swappable.
      (since C++11)
      (until C++17)
      noexcept specification:  
      (since C++17)

      [edit]Complexity

      1) Constant.
      2) Linear inN.

      [edit]Specializations

      std::swap may bespecialized in namespace std for program-defined types, but such specializations are not found byADL (the namespace std is not the associated namespace for the program-defined type).

      (until C++20)

      The expected way to make aprogram-defined type swappable is to provide a non-member function swap in the same namespace as the type: seeSwappable for details.

      The following overloads are already provided by the standard library:

      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function template)[edit]
      specializes thestd::swap algorithm
      (function)[edit]
      specializes thestd::swap algorithm
      (function)[edit]
      specializes thestd::swap algorithm
      (function)[edit]
      specializes thestd::swap algorithm
      (function)[edit]
      specializes thestd::swap algorithm
      (function)[edit]
      specializes thestd::swap algorithm
      (function)[edit]

      [edit]Example

      Run this code
      #include <algorithm>#include <iostream> namespace Ns{class A{int id{}; friendvoid swap(A& lhs, A& rhs){std::cout<<"swap("<< lhs<<", "<< rhs<<")\n";            std::swap(lhs.id, rhs.id);} friendstd::ostream& operator<<(std::ostream& os, Aconst& a){return os<<"A::id="<< a.id;} public:        A(int i): id{i}{}        A(Aconst&)= delete;        A& operator=(Aconst&)= delete;};} int main(){int a=5, b=3;std::cout<< a<<' '<< b<<'\n';    std::swap(a, b);std::cout<< a<<' '<< b<<'\n';     Ns::A p{6}, q{9};std::cout<< p<<' '<< q<<'\n';//  std::swap(p, q); // error, type requirements are not satisfied    swap(p, q);// OK, ADL finds the appropriate friend `swap`std::cout<< p<<' '<< q<<'\n';}

      Output:

      5 33 5A::id=6 A::id=9swap(A::id=6, A::id=9)A::id=9 A::id=6

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 227C++98T was not required to beCopyConstructible orDefaultConstructible
      (a temporary object of typeT might not be able to be constructed)
      T is also required to
      beCopyConstructible
      LWG 809C++98arrays could not be swappedadded overload(2)
      LWG 2554C++11swapping multi-dimensional arrays can never
      benoexcept due to name lookup problems
      made to work

      [edit]See also

      swaps the values of two objects
      (customization point object)[edit]
      swaps the elements pointed to by two iterators
      (function template)[edit]
      swaps two ranges of elements
      (function template)[edit]
      (C++14)
      replaces the argument with a new value and returns its previous value
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/algorithm/swap&oldid=175679"

      [8]ページ先頭

      ©2009-2025 Movatter.jp