C++ 是否有内置(例如 STL)的一部分来交换两个数值而不是:
int tmp = var1;
var1 = var2;
var2 = tmp;
像这样的东西:
std::swapValues(var1, var2);
其中 swapValues 是一个模板。
std::swap(var1, var2);
正如斯蒂芬所说,使用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
还有升压交换。
http://www.boost.org/doc/libs/1_43_0/libs/utility/swap.html
它克服了标准交换实现中的一些当前限制。如果您想为您的类型提供更高的效率,您仍然必须提供自己的专业化,但您在如何提供这些专业化方面有更多的自由度。