using namespace std;
void inplace_swap(int *x,int *y);
void reverse_array(int a[],int cnt);
int main(){
int array[5]={1,2,3,4,5};
reverse_array(array,5);
for(int i=0;i<5;i++)
cout<<array[i]<<' ';
return 0;
}
void inplace_swap(int *x,int *y){
*y=*x^*y;
*x=*x^*y;
*y=*x^*y;
}
void reverse_array(int a[],int cnt){
int first,last;
for(first=0,last=cnt-1;first<last;first++,last--)
inplace_swap(&a[first],&a[last]);
}
对于任一向量a ,有~~a^a=0(^:XOR)~~
inplace_swap 利用了~~(a^b)^a=b~~属性
如果for循环中循环条件为first<=last,将导致中间元素被置为0.
网友评论