C/C++中交换两个整型数值的方法
来源:互联网 发布:孙尚香铭文 知乎 编辑:程序博客网 时间:2024/05/02 01:49
实现交换两个整数的方式有很多,下面将简单介绍一些目前我学习到的方法,欢迎大家补充指正。
//C语言中学到的最简单直接的方式void swap(int* a,int* b){ int temp = *a; *a = *b; *b = temp;}
//由于C++中存在引用机制,可以直接修改传入参数的值void swap(int& a,int& b){ int temp = a; a = b; b= temp;}
同时也可以不使用临时变量来交换两个整数,一般常见的方法有两种:加法与异或运算。
//当x,y同号可能会超过整数的表示范围而溢出void swap1(int& x,int& y){ x = x + y; y = x - y; x = x - y; }
//当x,y异号时可能会溢出void swap2(int& x,int& y){ x = x - y; y = x + y; x = y - x;}
/* *C/C++语言中执行异或操作时会十进制数值转换二进制,然后按位异或。 *其中这里简单的介绍一下异或规则,即是:相同为0,不同为1。 *对下面的步骤进行简单地解释,一个数异或它自己即为0,而任何数异或0即它本身。 */void swap3(int& x,int& y){ if(x == y)//虽然不加if判断结果也是正确的,但可以省去执行操作的时间 return ; x ^= y;//x = x ^ y; y ^= x;//y = y ^ x; x ^= y;//x = x ^ y;}
上面两种使用加法描述的过程可能会导致溢出,同时不适用与swap(a,a)即两个参数相同的情况,因此可以对加法过程做一些改进:
void swap(int& x,int& y){ if(x == y) return ; //注意0这个临界值 if(x>=0 && y>=0 || x<=0 && y<=0){ x = x - y; y = x + y; x = y - x; } else{ x = x + y; y = x - y; x = x - y; }}
STL中swap函数原型的定义
template <class T>void swap(T& a,T& b){ T temp = a; a = b; b = temp;}
同时对于大多数容器也大体实现了各自的swap成员函数,然而这两者是不同的概念。对自定义类型使用STL algorithm中的swap函数,会调用自定义的类型的拷贝构造函数一次,赋值函数两次;自定义类型中没有定义那么就会使用默认的拷贝构造函数和赋值函数。 如果是容器,那么会遍历然后进行赋值。如果需要对自定义类型进行操作,自定义类型中涉及指针成员时,要注意深度拷贝的情况。
http://www.cnblogs.com/xkfz007/archive/2012/05/16/2505376.html
阅读全文
0 0
- C/C++中交换两个整型数值的方法
- C语言中交换两个变量数值的方法
- c语言交换两个数值的四种方法.
- C语言交换两个变量数值的几种方法
- C语言之交换两个整型变量的值(四种方法)
- C语言中—— 三种方法实现两个数值交换
- 【C语言】给定两个整型变量的值,将两个值的内容进行交换(不同方法)
- C的两个数值交换(Android之JNI)
- 关于c语言中交换两个数的方法
- 一些小点------c中两个变量交换的方法
- C语言中交换两个数的方法
- C++中两个数值交换的几种方法
- 交换两个整型数的方法
- 交换两个数字最好的方法 C
- 把两个变量交换数值的方法
- 交换两个数值的几种方法
- swift交换两个变量的数值方法
- 不用第三变量交换整型数值的三种方法
- 解决MariaDB中文乱码问题 Linux系统
- XGBoost原理简介
- bzoj 3359: [Usaco2004 Jan]矩形
- 出站链接对网站优化的影响
- OSI、TCP/IP参考模型、HTTP/HTTPS协议(简介)
- C/C++中交换两个整型数值的方法
- 欢迎使用CSDN-markdown编辑器
- angular入门
- openssl
- hdu2010
- 最大子序列问题
- [javascript高手之路] es6系列教程
- 控件封装模板
- Mybatis5.0.2分页插件