Pages

Thursday, October 8, 2009

Поменять значениями две переменные не используя временной переменной

Не знаю почему эта задача интересна. Может сто лет назад, когда у компьютеров было 64 килобайт памяти, 4 байта считалось экономией памяти? Все равно не понимаю. Наверное, задача имеет чисто теоретический интерес.
Ясно же, что самый простой и безопасный способ это ввести временную переменную того же типа и "перебросить" данные через нее:
void swap(int& x, int& y)
{
int m = x;
x = y;
y = m;
}

Собственно, тоже самое:
template <typename T>
void swap(T& x, T& y)
{
T m;
m = x;
x = y;
y = m;
}
Вот и без временной переменной:
void swap(int& x, int& y)
{
x = x + y;
y = x - y;
x = x - y;
}
А тут еще и XOR:
void swap(int& x, int& y)
{
x ^= y ^= x ^= y;
}

No comments:

Post a Comment