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

比如 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 里面

 #include<iostream>
#include<string>
#include<algorithm>//sort函数包含的头文件
using namespace std;
//定义一个学生类型的结构体
typedef struct student
{
string name; //学生姓名
int achievement; //学生成绩
} student; //用来显示学生信息的函数
void show(student *stu,int n)
{
for(int i = ; i < n; i++)
{
cout<<"姓名:"<<stu[i].name<<'\t'<<"成绩:"<<stu[i].achievement<<endl;
}
} int main()
{
student stu[] = { {"张三",},{"李四",},{"王二",} ,{"麻子",}};
cout<<"交换前:"<<endl;
show(stu,);
swap(stu[],stu[]);
cout<<"交换后:"<<endl;
show(stu,);
return ;
}

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

 #include<iostream>
using namespace std;
int main()
{
float a = 3.123456,b = 1234567.000000;
swap(a,b);
cout<<fixed;
cout<<a<<"->"<<b<<endl;
return ;
}
 #include<iostream>
#include<string>
using namespace std;
int main()
{
string a ="",b = "";
swap(a,b);
cout<<a<<"->"<<b<<endl;
return ;
}

C++中的swap(交换函数)的更多相关文章

  1. Linux中的SWAP交换分区

    大多数 Linux 在系统安装时都会提醒并建议你划分一个 SWAP 交换分区,如果你是从 Windows 切换到 Linux 的新用户,兴许对这个 SWAP 会感到十分疑惑. SWAP 交换分区到底是 ...

  2. centos中设置swap交换空间的大小设置和swappiness的比例设置

    首先使用free -m命令查看内存使用情况和swap的大小 关闭swap: 设置swap的大小: bs指的是Block Size,就是每一块的大小.这里的例子是1M,意思就是count的数字,是以1M ...

  3. [转]谈谈C++中的swap函数

    1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T c(a) ...

  4. 【转】 谈谈C++中的swap函数

    1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T c(a) ...

  5. C++中的swap函数

    最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符 template <class T> void swap ( T& a, T& b ) { T c(a); a ...

  6. C++中的string常用函数用法

    标准c++中string类函数介绍   注意不是CString 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而 ...

  7. c++中的string常用函数用法总结!

    标准c++中string类函数介绍 注意不是CString 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作 ...

  8. [转]c++中的string常用函数用法总结

    标准c++中string类函数介绍 注意不是CString之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作为 ...

  9. CentOS 新增swap交换空间

    在centos 6.4 64位系统中安装oracle 10g数据库软件,但由于交换空间过小导致检查不通过: 因此需要增加交换空间的大小. 第一步:在opt目录下新建swap交换文件,并设置其大小为2G ...

  10. Linux Swap交换分区介绍总结

    Swap交换分区概念   什么是Linux swap space呢?我们先来看看下面两段关于Linux swap space的英文介绍资料: Linux divides its physical RA ...

随机推荐

  1. lucene正向索引(续)——每次commit会形成一个新的段,段"_1"的域和词向量信息可能存在"_0.fdt"和"_0.fdx”中

    DocStoreOffset DocStoreSegment DocStoreIsCompoundFile 对于域(Stored Field)和词向量(Term Vector)的存储可以有不同的方式, ...

  2. 虚拟机VMware安装及Linux系统基础配置(CentOS 7)

    PS: 我是 VMware 14 安装 CentOS 7 来配置Linux虚拟机,想要安装 Ubuntu 18.04 的可以自行其他搜或者参考博客:https://blog.csdn.net/gith ...

  3. Centos7 安装svn步骤(宝塔面板)

    1.运行以下命令安装SVN yum install subversion 2.运行以下命令创建目录 mkdir /var/svn   3.依次运行以下命令创建版本库 cd /var/svn svnad ...

  4. java JSON的使用和解析

    There is no royal road to learning. 博主:JavaPanda https://www.cnblogs.com/LearnAndGet/p/10009646.html ...

  5. 阿里巴巴微服务与配置中心技术实践之道 原创: 坤宇 InfoQ 2018-02-08

    阿里巴巴微服务与配置中心技术实践之道 原创: 坤宇 InfoQ 2018-02-08

  6. React拾遗(上)

    JSX代表Objects Babel转义器会把JSX转换成一个名为React.createElement()的方法调用. 下面两种代码的作用是完全相同的: const element = ( < ...

  7. Ionic4.x Theming(主题) 增加内置主题 颜色 修改内置组件默认样式 修改底部 Tabs 背景颜色以及按钮颜色

    1.Ionic4.x Theming(主题) Ionic4.x 修改主题颜色的话需要在 src/theme/variables.scss 文件中修改. https://ionicframework.c ...

  8. 阿里云RDS与ECS服务器数据库做主从

    阿里云RDS与ECS服务器数据库做主从 [精] 里云RDS(数据库)基于飞天大规模分布式计算和存储能力,提供超高性价比的单机版实例,同时利用读写分离横向扩展读能力,满足网站类的业务需求.提供稳定.高性 ...

  9. Python网络编程之TCP套接字简单用法示例

    Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...

  10. 查看php 某个服务的进程数

    查看进程就是使用ps命令而已,只不顾ps的参数太多了. 使用php查询的话,必须要开启几个函数(可以执行外部程序的函数),参考官网:http://php.net/manual/zh/book.exec ...