c++swap函数
时间: 2025-05-08 18:01:57 浏览: 30
<<
`std::swap` 是 C++ 标准库提供的一种用于交换两个变量值的通用算法。
**一、使用方法**
1. **基本数据类型**
对于基本的数据类型(如 int, double等),可以直接调用 `std::swap` 函数进行交换操作:
```cpp
int a = 5;
int b = 10;
std :: swap(a,b);
//此时a=10;b=5;
```
2. **自定义类型的swap重载**
如果想要为自己的类或结构体也能够方便地使用 `std::swap` 进行成员属性之间的互换,则可以通过全局函数或者类内非静态成员函数的形式对该函数进行重载。通常来说,在 STL 容器中插入 自定义 类型 的对象时,编译器会自动选择合适的版本;但为了确保效率与正确性,我们还是建议用户自己去明确指定如何执行“元素间”内容上的替换行为。
例如以下这个简单的Person类的例子:
```cpp
class Person {
public:
string name;
int age;
private :
//...
};
void swap(Person& first , Person & second){
using std::swap; //引入命名空间中的模板化版本作为默认回退选项
swap(first.name ,second.name );
swap( first.age , second.age);
}
```
以上代码展示了怎样为包含字符串和其他内置数值字段的人类实体编写辅助工具程序以支持其内部状态信息间的相互转移功能.
**二、原理及实现机制**
实际上在很多标准库里边它的底层逻辑大概是这样的 :
- 创建临时副本 : 先把第一个参数所指代目标的内容复制到局部作用域下的新实例里.
- 移动赋值: 接着将第二个实参里的原始资料搬移到原先存放前者的位置上.
- 最后一步则是完成反向搬运动作——即让最初传入的那个被当作源端的对象接收下暂存区内的东西.
这样做虽然简单直接但也并非总是最优解法尤其是在处理大型复杂记录结构或是频繁涉及动态内存分配的情形下可能会带来不必要的开销因此部分优化后的变种形式采用了更巧妙的设计思路比如只交换指向实际存储地址的引用而非整个对象本体本身从而避免了重复拷贝带来的额外负担。
阅读全文
相关推荐


















