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中的分配器相等,或者它們的分配器特性指示分配器需要傳播,則該函式永遠不會丟擲異常(無丟擲保證)。
否則,將導致未定義行為

另見