C++;内置交换两个数值? C++有内置的STL的一部分,交换两个数值而不是做: int tmp = var1; var1 = var2; var2 = tmp;
大概是这样的:C++;内置交换两个数值? C++有内置的STL的一部分,交换两个数值而不是做: int tmp = var1; var1 = var2; var2 = tmp;,c++,stl,swap,C++,Stl,Swap,大概是这样的: std::swapValues(var1, var2); 其中SwapValue是一个模板。使用 正如Stephen所说,使用std::swap(var1,var2) 它是一个模板化函数,因此您可以为特定类(如智能指针)提供自己的专业知识,这些类可能具有昂贵的赋值运算符: namespace std { template<> void swap<MySmartPointer>(MySmartPointer& v1, MySmart
std::swapValues(var1, var2);
其中SwapValue是一个模板。使用
正如Stephen所说,使用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
名称空间std
{
模板
无效交换(MySmartPointer&v1、MySmartPointer&v2)
{
std::swap(v1.internalPointer,v2.internalPointer);
}
}
// ...
std::swap(pointerA,pointerB);//超快!!!!1.
还有Boost-Swap
它克服了目前标准交换实现中的一些限制。如果您想提高类型的效率,您仍然必须提供自己的专门化,但对于如何提供这些专门化,您有更大的自由度。我同意使用std::swap,但需要注意的是,std::swap使用您正在交换的任何对象的副本构造函数。所以请记住,这对于原始数据类型来说是很好的,但是一旦开始进入更大的结构和类,效率就会降低@C Nielsen,但是你可以使用通常的习惯用法,专门为昂贵的类设置
std::swap
,以避免出现临时问题。如果有更有效的方法,这种较大的对象可能会过载std::swap
。@C Nielsen,@Alex B,就如何专门设置std::swap
。谢谢大家,我不会通过编辑关于swap
specializations的讨论来增加噪音-评论和@tenpn的答案很好地涵盖了它。我还要补充一点,Scott Meyer用有效的C++来覆盖它。()确保阅读问题中的讨论。这是一个很好的方法,但是你必须意识到与之相关的问题。
namespace std
{
template<>
void swap<MySmartPointer>(MySmartPointer& v1, MySmartPointer& v2)
{
std::swap(v1.internalPointer, v2.internalPointer);
}
}
// ...
std::swap(pointerA, pointerB); // super-fast!!!!1