笔记82:关于 C++ 中的 swap 函数

背景:在刷题代码随想录时发现参考代码使用了swap函数,但是是用来交换一个vector容器中的两个元素的;但是我依稀记得标准模板库中vector函数自带的swap函数是用来交换两个容器内所有的元素的;


一、STL中的swap()函数:

注意:这是头文件<algorithm>中包含的函数,他是配合容器来使用的

  • 功能描述:互换两个容器的元素
  • 函数原型1:swap(container c1, container c2)
  • 函数原型2:container c1.swap(container c2)
  • 参数:容器1的名字 + 容器2的名字
  • 作用方式:函数swap()真正的作用,其实并没有对内存动手脚,就是把v1和v2这两个容器名的指向换了一下
  • 补充说明:swap()有一个很实用的功能,但是需要其他函数的辅助,这个功能是【收缩内存】,具体提及这个功能在【202_36_vector容器_互换容器】这一节内

二、std::swap()函数:

注意:在题目代码随想录中使用的swap函数是这个,这是标准命名空间中提供的函数

  • 功能描述:交换两个变量的值

实现方式1:创建临时空间,用来交换两个变量的值

int temp = a;
a = b;
b = temp;

实现方式2:不建立临时空间,同样可以实现交换两个变量的值

# 加减法
a = a + b;
b = a - b;
a = a - b;

# 补充:该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失
# 乘除法
a = a * b;
b = a / b;
a = a / b;

补充1:与加减法类似,可以处理整型和浮点型变量,但在处理浮点型变量时也存在精度损失问题,而且乘除法比加减法要多一条约束,即b必不为0
补充2:可能经验上的某种直觉告诉我们,加减法和乘除法可能会溢出,而且乘除的溢出会特别严重。其实不然,采用这两种方法都不会溢出。以加减法为例,第一步的加运算可能会造成溢出,但它所造成的溢出会在后边的减运算中被溢出回来。

实现方式3:采用二进制,使用异或

# 异或法
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

# 补充:异或法可以完成对整型变量的交换,但是对于浮点型变量它无法完成交换。

相关推荐

  1. 笔记82关于 C++ swap 函数

    2024-03-29 16:14:01       20 阅读
  2. C语言关于函数和数组理解

    2024-03-29 16:14:01       40 阅读
  3. 笔记93:关于 C++ Eigen 库

    2024-03-29 16:14:01       8 阅读
  4. 关于php匿名函数use

    2024-03-29 16:14:01       33 阅读
  5. 关于ros回旋函数

    2024-03-29 16:14:01       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 16:14:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 16:14:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 16:14:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 16:14:01       20 阅读

热门阅读

  1. SQL中如何添加数据【保姆】

    2024-03-29 16:14:01       18 阅读
  2. sql server用nest typeorm实现索引的方式

    2024-03-29 16:14:01       17 阅读
  3. cesium NearFarScalar pixelOffsetScaleByDistance

    2024-03-29 16:14:01       20 阅读
  4. Compose UI 之 FloatingActionButton 按钮

    2024-03-29 16:14:01       18 阅读
  5. Docker 四种镜像制作方式

    2024-03-29 16:14:01       18 阅读
  6. qt.如何学习

    2024-03-29 16:14:01       15 阅读
  7. 软件速成书的神奇之处

    2024-03-29 16:14:01       18 阅读
  8. 非root用户安装git lfs(git大文件)命令记录

    2024-03-29 16:14:01       19 阅读
  9. PDF按行&页读取文字

    2024-03-29 16:14:01       18 阅读