c swap方法在哪个库里面_C++中的swap(交换函数)

交换两个变量的值很简单。

比如 int a = 1; b = 2; 交换a b的值

这个很简单 很容易想到的是找个中间变量比如  int temp  = a; a = b; b = temp;

不需要中间变量可不可以?

当然是可以的。

比如

【加减法】

a = a + b; b = a - b; a = a - b;

该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失,例如对数据:

a = 3.123456

b = 1234567.000000

交换后各变量值变为:

a = 1234567.000000

b = 3.125000

很明显,原来a的值在交换给b的过程中发生了精度损失。

【乘除法】

a = a * b; b = a / b; a = a / b;

乘除法更像是加减法向乘除运算的映射,它与加减法类似:可以处理整型和浮点型变量,但在处理浮点型变量时也存

在精度损失问题。而且乘除法比加减法要多一条约束:b必不为0。

可能经验上的某种直觉告诉我们:加减法和乘除法可能会溢出,而且乘除的溢出会特别严重。其实不然,采用这两种

方法都不会溢出。以加减法为例,第一步的加运算可能会造成溢出,但它所造成的溢出会在后边的减运算中被溢出回来。

【异或法】

a ^= b;       //a=a^b

b ^= a;      //b=b^(a^b)=b^a^b=b^b^a=0^a=a

a ^= b;     //a=(a^b)^a=a^b^a=a^a^b=0^b=b

异或法可以完成对整型变量的交换,对于浮点型变量它无法完成交换。

第二类方法更像是玩了一个文字游戏,此种方法采用了在代码中嵌入汇编代码的方法避免了临时变量的引入,但究其

本质还是会使用额外的存储空间。此种方法可以有很多种,下边列出几种:

等等..............

但是对结构体这种交换就不太实用了应为结构体需要对每个数据都进行交换,这个时候用函数就是最简单的了。

C++提供了一个swap函数用于交换,用法如下。

swap 包含在命名空间std 里面

1 #include

2 #include

3 #include//sort函数包含的头文件

4 using namespacestd;5 //定义一个学生类型的结构体

6 typedef structstudent7 {8 string name; //学生姓名

9 int achievement; //学生成绩

10 } student;11

12

13

14

15 //用来显示学生信息的函数

16 void show(student *stu,intn)17 {18 for(int i = 0; i < n; i++)19 {20 cout<

24 intmain()25 {26 student stu[] = { {"张三",99},{"李四",87},{"王二",100} ,{"麻子",60}};27 cout<

用函数不用担心精度的损失

1 #include

2 using namespacestd;3 intmain()4 {5 float a = 3.123456,b = 1234567.000000;6 swap(a,b);7 cout<"<

1 #include

2 #include

3 using namespacestd;4 intmain()5 {6 string a ="666",b = "999";7 swap(a,b);8 cout<"<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值