function template
<set>

std::swap (set)

template <class T, class Compare, class Alloc>  void swap (set<T,Compare,Alloc>& x, set<T,Compare,Alloc>& y);
交换两个set的内容
容器x的内容与y的内容交换。两个容器对象必须是相同的类型(具有相同的模板参数),但大小可以不同。

调用此成员函数后,x中的元素将是调用前y中的元素,而y中的元素将是调用前x中的元素。所有迭代器、引用和指针对于被交换的对象都保持有效。

这是通用算法swap的一个重载,它通过将资产的所有权相互转移给另一个容器来提高性能(即,容器交换其数据的引用,而无需实际执行任何元素复制或移动):它表现得好像x.swap(y)被调用。

参数

x,y
相同类型的set容器(即,同时具有相同的模板参数,T, CompareAlloc).

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// swap (set overload)
#include <iostream>
#include <set>

main ()
{
  int myints[]={12,75,10,32,20,25};
  std::set<int> first (myints,myints+3);     // 10,12,75
  std::set<int> second (myints+3,myints+6);  // 20,25,32

  swap(first,second);

  std::cout << "first contains:";
  for (std::set<int>::iterator it=first.begin(); it!=first.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  std::cout << "second contains:";
  for (std::set<int>::iterator it=second.begin(); it!=second.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

输出
first contains: 20 25 32
second contains: 10 12 75


复杂度

常量。

迭代器有效性

指向两个容器中元素的任何迭代器、指针和引用都保持有效,并且现在指向它们在调用之前所指向的相同元素,但在另一个容器中,它们现在迭代。
请注意,end迭代器不指向元素,并且可能会失效。

数据竞争

调用会修改xy两个容器。
调用不会访问任何包含的元素(尽管请参阅上面的迭代器有效性)。

异常安全

如果两个set中的分配器相等,或者它们的分配器特性指示分配器需要传播,则该函数永远不会抛出异常(无抛出保证)。
否则,将导致未定义行为

另见