SGI

交换

类别: 算法 组件类型: 函数

原型

template <class Assignable> 
void swap(Assignable& a, Assignable& b);

描述

a的内容赋值给b,并将b的内容赋值给a的内容赋值给 a。这在许多其他算法中用作基本操作。

定义

在标准头文件 algorithm 中定义,以及非标准的向后兼容头文件 algo.h 中定义。

类型要求

先决条件

无。

复杂度

摊销常数时间。 [1] [2]

示例

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*Ndouble的赋值,但专门版本只需要九个指针赋值。这一点很重要,因为交换用作许多其他 STL 算法中的基本操作,并且因为容器的容器(list<vector<char> >等)非常常见。STL 包含交换针对所有容器类的专门版本。用户定义的类型也应该提供交换的专门版本,只要可以编写一个比一般版本更高效的版本。

另请参阅

iter_swap, swap_ranges
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息