C++ 在C/C+中交换两个没有第三个号码的号码+;
我们通常使用C++ 在C/C+中交换两个没有第三个号码的号码+;,c++,C++,我们通常使用 a=a+b; b=a-b; a=a-b; 但是,如果我们使用int,那么在30000之后,代码就会失败;如果我们使用long,那么在1000000之后,代码就会失败。我的目标不是增加代码的长度,而是执行相同的操作。我已经尝试过使用位异或 a = a ^ b; b = a ^ b; a = a ^ b; 还是没用,有什么办法吗?交换一个变量a和一个变量b:std::swap(a,b) 例如: int a = 10; int b = 20; std::cout <<
a=a+b;
b=a-b;
a=a-b;
但是,如果我们使用int
,那么在30000
之后,代码就会失败;如果我们使用long
,那么在1000000
之后,代码就会失败。我的目标不是增加代码的长度,而是执行相同的操作。我已经尝试过使用位异或
a = a ^ b;
b = a ^ b;
a = a ^ b;
还是没用,有什么办法吗?交换一个变量
a
和一个变量b
:std::swap(a,b)代码>
例如:
int a = 10;
int b = 20;
std::cout << "Before swap\n";
std::cout << "Value of a: " << a << '\n';
std::cout << "Value of b: " << b << '\n';
std::swap(a, b);
std::cout << "After swap\n";
std::cout << "Value of a: " << a << '\n';
std::cout << "Value of b: " << b << '\n';
inta=10;
int b=20;
你能解释一下“代码失败”是什么意思吗?到底出了什么问题?看起来如果a
和b
太大,加法可能会超出integer
范围。具有讽刺意味的是,所有避免使用额外变量的尝试都会导致较大的代码运行较慢。而且有额外的bug。这听起来像个问题。为什么要这样做?移动int与复制int的成本完全相同。不,std::swap特别不适用于r值(它在内部使用它们,但是对于int,这没有什么区别)。@MikeMB关于只在内部使用右值的好观点,我认为在上下文中会很清楚。编辑成显式。是的,ints也是如此,但我尽量回答尽可能广泛适用的问题,所以我想指出std::swap的一般好处,如果“我不想使用第三个变量”的答案是创建1(实际上是3),那么这也是一个问题在函数中添加新变量并调用该函数。@PatrickM'Bongo如果我的用词混乱,我很抱歉。我想表达的是,与a-b代码>,在内部使用b=std::move(a)
时不存在。同样是的,在这个特定的示例中,可能创建的temp变量(尽管不保证)使用常规副本。只要OP对非基本数据类型(如std::vector
)使用std::swap
,真正的好处就开始显现,这不会产生复制开销。