C ++ встроенный, чтобы поменять два числовых значения? - PullRequest
4 голосов
/ 10 июля 2010

Есть ли в C ++ встроенная функция, такая как часть STL, для замены двух числовых значений вместо выполнения:

int tmp = var1;

var1 = var2;
var2 = tmp;

Примерно так:

std::swapValues(var1, var2);

Где swapValues ​​является шаблоном.

Ответы [ 3 ]

24 голосов
/ 10 июля 2010

Использование std::swap

std::swap(var1, var2);
5 голосов
/ 10 июля 2010

Как говорит Стивен, используйте 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
1 голос
/ 13 июля 2010

Существует также Boost Swap.

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

Он преодолевает некоторые из существующих ограничений в стандартной реализации подкачки.Вам все еще нужно предоставить свои собственные специализации, если вы хотите повысить эффективность своих типов, но у вас есть немного больше возможностей для предоставления этих специализаций.

...