4

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

int tmp = var1;

var1 = var2;
var2 = tmp;

像这样的东西:

std::swapValues(var1, var2);

其中 swapValues 是一个模板。

4

3 回答 3

24

采用std::swap

std::swap(var1, var2);
于 2010-07-10T14:04:21.977 回答
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
于 2010-07-10T14:16:37.247 回答
1

还有升压交换。

http://www.boost.org/doc/libs/1_43_0/libs/utility/swap.html

它克服了标准交换实现中的一些当前限制。如果您想为您的类型提供更高的效率,您仍然必须提供自己的专业化,但您在如何提供这些专业化方面有更多的自由度。

于 2010-07-12T20:41:16.887 回答