C++内置交换两个数值?

Wil*_*mKF 4 c++ swap stl

C++是否有内置的部分STL来交换两个数值而不是:

int tmp = var1;

var1 = var2;
var2 = tmp;
Run Code Online (Sandbox Code Playgroud)

像这样的东西:

std::swapValues(var1, var2);
Run Code Online (Sandbox Code Playgroud)

swapValues是一个模板.

Ste*_*hen 24

使用 std::swap

std::swap(var1, var2);
Run Code Online (Sandbox Code Playgroud)

  • 我同意使用std :: swap警告std :: swap使用你交换的任何副本构造函数.所以请记住,这对于原始数据类型来说很好,但是一旦你开始涉及更大的结构和类,它就会变得不那么有效了.http://www.cplusplus.com/reference/algorithm/swap/ (3认同)
  • @C尼尔森,但你可以使用通常的习惯用法,并将'std :: swap`专门用于昂贵的课程以避免暂时的. (3认同)

ten*_*npn 5

斯蒂芬说,使用 std::swap(var1, var2);

它是一个模板化的函数,因此您可以为特定的类提供自己的特化,例如智能指针,这些类可能有昂贵的赋值运算符:

namespace std
{
    template<>
    void swap<MySmartPointer>(MySmartPointer& v1, MySmartPointer& v2)
    {
        std::swap(v1.internalPointer, v2.internalPointer);
    }
}

// ...

std::swap(pointerA, pointerB); // super-fast!!!!1
Run Code Online (Sandbox Code Playgroud)

  • 请务必阅读[如何超载`std :: swap`](http://stackoverflow.com/questions/11562/how-to-overload-stdswap)问题中的讨论.这是一个很好的方法,但你必须意识到与之相关的问题. (3认同)