invertire 2 variabili a=b b=a

salve ho una domanda veloce. ho una variabile "a" e un "b" esempio: a=3 b=5 devo invertire in modo che diventi: a=5 b=3 se io uso a=b b=a "a" mi diventerà 5 ma "b" resterà 5 lo so che potrei usare altre due variabili per ricordare ma volevo un codice più pulito evitando aggrovigliamenti di codice

Te ne basta solo una: temp = a; a = b; b = temp;

altre soluzioni non credo esistano.

Con i puntatori?

brexino: Con i puntatori?

Te ne serve uno comunque di appoggio per mantenere uno dei due valori.. Ciao

si può fare usando un pò di matematica e facendo attenzione agli overflow:

void swap(int &x, int &y)
{
    x -= y;
    y += x;         // y gets the original value of x
    x = (y - x);    // x gets the original value of y
}

enjoy

edit da: http://devmaster.net/forums/topic/266-swapping-two-variables-without-using-a-temp-var/

fighissima la

void swap2(int &x, int &y)
{
        x ^= y ^= x ^= y;
}

c’e’ anche l’XOR

a ^= b;
b ^= a;
a ^= b;

@lesto mi ha preceduto

a ^= b ^= a ^= b ; // swap (a,b)

Figo... non ci avevo mai pensato di metterlo in una sola riga