代码之家  ›  专栏  ›  技术社区  ›  WilliamKF

C++BuiTin交换两个数值?

  •  4
  • WilliamKF  · 技术社区  · 14 年前

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

    int tmp = var1;
    
    var1 = var2;
    var2 = tmp;
    

    像这样:

    std::swapValues(var1, var2);
    

    其中swapValues是一个模板。

    3 回复  |  直到 11 年前
        1
  •  24
  •   Stephen    11 年前

    使用 std::swap

    std::swap(var1, var2);
    
        2
  •  5
  •   tenpn    14 年前

    正如斯蒂芬所说,使用 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
    
        3
  •  1
  •   Ken Smith    14 年前

    还有增强交换。

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

    它克服了标准交换实现中当前的一些限制。如果您想要为您的类型提供更好的效率,那么您仍然需要提供自己的专门化,但是对于如何提供这些专门化,您有更多的自由度。