类别: 算法 | 组件类型: 函数 |
template <class Assignable> void swap(Assignable& a, Assignable& b);
int x = 1; int y = 2; assert(x == 1 && y == 2); swap(x, y); assert(x == 2 && y == 1);
[1] 交换两个类型为交换T的对象所需的时间显然取决于类型;“常数时间”并不意味着对于 8 位char和 128 位complex<double>的性能相同。.
[2] 此实现交换调用一次拷贝构造函数和两次赋值运算符;因此,它大约需要与三次赋值相同的时间。但是,在许多情况下,可以编写交换的专门版本,该版本效率更高。例如,考虑交换两个vector<double>,每个都包含N个元素。非专门版本需要3*N个double的赋值,但专门版本只需要九个指针赋值。这一点很重要,因为交换用作许多其他 STL 算法中的基本操作,并且因为容器的容器(list<vector<char> >等)非常常见。STL 包含交换针对所有容器类的专门版本。用户定义的类型也应该提供交换的专门版本,只要可以编写一个比一般版本更高效的版本。