如果我使用具有相同值的XOR交换算法,则交换不会失败:
void (Class::*)(Class*, ArgTs...)
如果我使用指针,交换失败(x将为零):
#include <stdio.h>
int main()
{
int x = 10, y = 10;
x = x ^ y;
y = x ^ y;
x = x ^ y;
printf("After Swapping: x = %d, y = %d", x, y); // prints "After Swapping: x = 10, y = 10"
return 0;
}
算法是否会以相同的值失败?如果我只使用布尔代数,当我进行第一次XOR运算时,交换将失败(第一个参数将变为零)。
编辑:明确“失败”是指
答案 0 :(得分:1)
让我们一步一步地运行这两种情况。
案例#1:2个变量,相同的值
#include<iostream>
#include<vector>
using namespace std;
int main() {
// your code goes here
vector<int> v;
for(int i=0;i<10;i++){
v.push_back(i);
cout<<v.size()<<" "<<v.capacity()<<" "<<"\n";
}
return 0;
}
在这种情况下,x y
10 10
*run x = x^y*
0 10
*run y = x^y*
0 10
*run x = x^y*
10 10
位置保存值,它可以生成正确的结果。现在,让我们看看案例#2。
案例#2:一个位置,比如x。
y
对于所有未来的陈述,0 ^ 0给出0.因此o / p。