vector::swap – C++ Reference

public member function

<vector>

void swap (vector& x);

Swap content

x, which is another

After the call to this member function, the elements in this container are those which were in x before the call, and the elements of x are those which were in this. All iterators, references and pointers remain valid for the swapped objects.

Notice that a non-member function exists with the same name,

[contradictory specifications]

No specifics on allocators

Whether the container allocators are also swapped is not defined, unless in the case the appropriate allocator traits indicate explicitly that they shall propagate

The bool specialization of

Exchanges the content of the container by the content of, which is another vector object of the same type. Sizes may differ.After the call to this member function, the elements in this container are those which were inbefore the call, and the elements ofare those which were in this. All iterators, references and pointers remain valid for the swapped objects.Notice that a non-member function exists with the same name, swap , overloading that algorithm with an optimization that behaves like this member function.Thespecialization of vector provides an additional overload for this function (see vector<bool>::swap ).

Parameters

x
Another vector container of the same type (i.e., instantiated with the same template parameters, T and Alloc) whose content is swapped with that of this container.

Return value

none

Example

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;
}

Output:

foo contains: 200 200 200 200 200 
bar contains: 100 100 100 

Output:

Complexity

Constant.

Iterator validity

All iterators, pointers and references referring to elements in both containers remain valid, and are now referring to the same elements they referred to before the call, but in the other container, where they now iterate.
Note that the end iterators do not refer to elements and may be invalidated.

Data races

Both the container and x are modified.
No contained elements are accessed by the call (although see iterator validity above).

Exception safety

If the allocators in both
Otherwise, it causes undefined behavior.

If the allocators in both vectors compare equal, or if their allocator traits indicate that the allocators shall propagate , the function never throws exceptions (no-throw guarantee).Otherwise, it causes

See also