PLAINTEXT
void inplace_swap(int *x,int *y)
{
*y=*x^*y;
*x=*x^*y;
*y=*x^*y;
}void inplace_swap(int *x,int *y)
{
*y=*x^*y;
*x=*x^*y;
*y=*x^*y;
}
임시 변수 없이 두 정수를 맞바꾸는 코드다. XOR 은 같은 값을 두 번
적용하면 원래대로 돌아오므로(a ^ b ^ b == a), 세 줄이 지나면 두
자리의 값이 서로 바뀐다.
한 가지 함정이 있다. x 와 y 가 같은 곳을 가리키면 첫 줄에서
*y = *x ^ *y 가 a ^ a 가 되어 0 이 되고, 그 뒤 두 줄도 모두 0 이라
값이 0 으로 날아간다. 컨테이너의 두 원소를 인덱스로 바꿀 때처럼 두
인자가 같아질 수 있는 자리에서는 먼저 걸러야 한다.
댓글