Adr*_*thy 10
std::swapfrom <algorithm>是作为模板实现的,因此它可以交换任何给定类型的两个变量的值.它的原型看起来像这样:
template <typename T> void swap(T& a, T& b);
Run Code Online (Sandbox Code Playgroud)
典型的实现是将一个值保存在临时值中,将第二个值复制到第一个变量,然后将临时值放入第二个变量中.在C++中,这涉及复制构造函数和赋值运算符.
对于大型物体,所有这些构造和复制都很昂贵.包括大多数(全部?)STL容器在内的许多对象都有一个重载的实现,它可以通过交换一些指针值来实现.交换指针非常快,它避免了任何潜在的失败(如复制构造函数中的内存分配).重载std::swap转发到成员函数(通常也称为swap).成员函数可以访问内部,因此它可以使用更有效的方法.重载可能看起来像这样(简化):
template <typename T> void swap<vector<T> >(vector<T>& a, vector<T>& b) {
a.swap(b);
}
Run Code Online (Sandbox Code Playgroud)
如果要查看实际代码,可以浏览std编译器和操作系统的头文件.