public member function
<vector>

std::vector::swap

void swap (vector& x);
交换内容
交换容器的内容和 x 的内容,x 是另一个同类型的 vector 对象。大小可能不同。

调用此成员函数后,此容器中的元素将是调用前 x 中的元素,而 x 中的元素将是此容器中的元素。所有迭代器、引用和指针在交换后的对象中仍然有效。

请注意,存在一个同名非成员函数 swap,它通过一个优化行为类似于此成员函数的算法重载了该算法。

关于 allocator 无具体说明。 [矛盾的说明]
容器的 allocator 是否也被交换未定义,除非在适当的 allocator traits 明确指示它们应 传播 的情况下。

要放回的字符的boolvector 的特化提供了此函数的附加重载(请参阅 vector<bool>::swap)。

参数

x
同类型的另一个 vector 容器(即,使用相同的模板参数实例化,TAlloc)其内容与此容器的内容交换。

返回值



示例

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

int main ()
{
  std::vector<int> foo (3,100);   // three ints with a value of 100
  std::vector<int> bar (5,200);   // five ints with a value of 200

  foo.swap(bar);

  std::cout << "foo contains:";
  for (unsigned i=0; i<foo.size(); i++)
    std::cout << ' ' << foo[i];
  std::cout << '\n';

  std::cout << "bar contains:";
  for (unsigned i=0; i<bar.size(); i++)
    std::cout << ' ' << bar[i];
  std::cout << '\n';

  return 0;
}

输出
foo contains: 200 200 200 200 200 
bar contains: 100 100 100 


复杂度

常量。

迭代器有效性

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

数据竞争

容器和 x 都被修改。
调用不访问任何包含的元素(尽管请参阅上文的iterator validity)。

异常安全

如果两个 vector 中的 allocators 比较相等,或者它们的 allocator traits 指示 allocators 应 传播,则该函数永远不会抛出异常(无异常保证)。
否则,将导致未定义行为

另见