c++的一个更好的低级别int交换
a better ow level int swap for c++
我正在学习c++,我有一个像这样的函数…
void int_swap(int *n, int *m){
int temp;
temp = *n;
*n = *m;
*m = temp;
}
我只想让它交换2个int型。这纯粹是一个学习练习。
很好。我只是想知道是否有更好的方法来处理大类型的对象。它能在不创建临时变量的情况下完成吗?
异或交换不需要中间变量:
https://en.wikipedia.org/wiki/XOR_swap_algorithm来自维基页面:
void xorSwap (int *x, int *y) {
if (x != y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}
虽然大多数现代编译器会自动优化你的代码,所以有可能你的编译器已经选择了最有效的方法来交换两个变量。参见wiki文章中的"实践中避免使用的原因"一节。
void swap(int &a,int &b)
{
a=a+b;
b=a-b;
a=a-b;
}
可以使用引用
template<typename T>
void swap(T& x, T& y)
{
T temp = std::move(x);
x = std::move(y);
y = std::move(temp);
}
void swap(int & x , int& y)
{
if(x != y)
y ^= x ^= y ^= x;
}
void swap (int& x, int& y)
{
x += y;
y = x - y;
x -= y;
}
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- C++ int* 和 char* 字节顺序已交换
- 如何将 std::vector 索引交换到<int>数据,将数据交换到索引
- swap(int&, int&) 函数不起作用,当交换不使用临时变量时?
- 是否可以交换在 c++ 中作为函数 func(say) 中的参数传递的 const 向量的两个元素,例如:vector<int>func (const vector<int>&
- std::atomic<int*>::load 应该做一个比较和交换循环吗?
- 互锁。比较交换<Int> 使用大于或小于而不是相等
- 单链表交换函数(int,int)
- c++的一个更好的低级别int交换