c/c++ swap
时间: 2025-03-26 08:16:29 浏览: 48
### C 和 C++ 中交换两个变量值的方法
#### 使用临时变量的传统方法
在C和C++中,最常见的方式是使用一个额外的临时变量来完成两数之间的交换操作。
对于C语言:
```c
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
```
这段代码展示了如何定义并实现`swap`函数[^1]。此方式简单直观,在许多情况下都适用。
而对于C++来说,除了上述传统做法外还有更简洁高效的途径可供选择。
#### 利用标准库中的 `std::swap`
现代C++提供了内置于STL的标准模板库函数——`std::swap()`来进行数据成员间的互换工作,它不仅限于基本类型而且支持自定义类对象间的安全转换。
```cpp
#include <utility> // 导入 std::swap 所需头文件
// 对基础类型的交换
int main() {
int x = 5, y = 10;
std::swap(x, y);
// 输出结果验证
printf("After swapping: %d %d\n", x, y);
return 0;
}
```
值得注意的是,当涉及到复杂的数据结构比如容器时,应该遵循C++核心准则C.84指出的原则:`swap` 函数不应抛出异常,因为这可能会影响依赖该特性的其他组件正常运作[^3]。
另外,如果想要创建自己的可移植版本,则可以通过引用传递参数从而避免不必要的复制开销;同时利用右值引用特性进一步优化性能表现。
#### 自定义泛型Swap函数(适用于C++)
```cpp
template<typename T>
void generic_swap(T& a, T& b){
T tmp(std::move(a));
a=std::move(b);
b=std::move(tmp);
}
struct NonTrivialType{
/* ... */
};
NonTrivialType objA{},objB{};
generic_swap(objA,objB);
```
这里展示了一个通用化的`generic_swap`模板函数,它可以处理任意具有移动语义的对象实例,并且能够有效减少资源占用率以及提高执行效率。
阅读全文
相关推荐


















