std::swap

 

std::swap             function template     <algorithm>

template <class T> void swap ( T& a, T& b );
Exchange values of two objects(交换两个对象的值)

Assigns the content of a to b and the content of b to a.
(将a的内容给b,将b的内容给a。)

The behavior of this function template is equivalent to:
(该函数模板的实现如下:)
 template <class T> void swap ( T& a, T& b )
{
  T c(a); a=b; b=c;
}
 


Notice how this function involves a copy construction and two assignment operations, which may not be the most efficient way of swapping the contents of classes that store large quantities of data, since each of these operations generally operate in linear time on their size.
(注意,该函数是通过调用一个拷贝构造函数和两个赋值操作来交换两个对象的内容,这并不是最高效的交换方法对大数据来说,因为每个操作时间都是跟对象大小的成正比的线性时间关系。)

Because this function template is used as a primitive operation by many other algorithms, it is highly recommended that large data types overload their own specialization of this function. Notably, all STL containers define such specializations (at least for the standard allocator), in such a way that instead of swapping their entire data content, only the values of a few internal pointers are swapped, making this operation to operate in real constant time with them.


Parameters
a, b
Two objects, whose contents are swapped.
The type must be copy constructible and support assignment operations. (类型T必须包含拷贝构造和支持赋值操作。)


Return value
none


Example
// swap algorithm example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main () {

  int x=10, y=20;                         // x:10 y:20
  swap(x,y);                              // x:20 y:10

  vector<int> first (4,x), second (6,y);  // first:4x20 second:6x10
  swap(first,second);                     // first:6x10 second:4x20

  cout << "first contains:";
  for (vector<int>::iterator it=first.begin(); it!=first.end(); ++it)
    cout << " " << *it;

  cout << endl;

  return 0;
}
 

Output:

first contains: 10 10 10 10 10 10

 
Complexity
Constant: Performs exactly one copy construction and two assignments (although notice that each of these operations works on its own complexity).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值