Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::vector::swap(3)	      C++ Standard Libary	  std::vector::swap(3)

NAME
       std::vector::swap - std::vector::swap

Synopsis
	  void		  swap(		  vector&	    other	    );
       (until C++17)
	  void	swap(	vector&	  other	  )   noexcept(/*   see	  below	  */);
       (since C++17)
									   (un-
       til C++20)
	  constexpr  void  swap(  vector&  other  ) noexcept(/*	see below */);
       (since C++20)

	  Exchanges the	contents of the	container with those  of  other.  Does
       not invoke any
	  move,	copy, or swap operations on individual elements.

	  All iterators	and references remain valid. The past-the-end iterator
       is invalidated.

	  If	      std::allocator_traits<allocator_type>::propagate_on_con-
       tainer_swap::value
	  is true, then	the allocators are exchanged using an unqualified call
       to	(since
	  non-member swap. Otherwise, they are not swapped (and	if get_alloca-
       tor() !=	  C++11)
	  other.get_allocator(), the behavior is undefined).

Parameters
	  other	- container to exchange	the contents with

Return value
	  (none)

Exceptions
	  (none)
       (until
											C++17)
	  noexcept						specification:
       (since
	  noexcept(std::allocator_traits<Allocator>::propagate_on_con-
       tainer_swap::value C++17)
	  || std::allocator_traits<Allocator>::is_always_equal::value)

Complexity
	  Constant.

Example
       // Run this code

	#include <iostream>
	#include <vector>

	template<class Os, class Co> Os& operator<<(Os&	os, const Co& co) {
	    os << "{";
	    for	(auto const& i : co) { os << ' ' << i; }
	    return os << " } ";
	}

	int main()
	{
	    std::vector<int> a1{1, 2, 3}, a2{4,	5};

	    auto it1 = std::next(a1.begin());
	    auto it2 = std::next(a2.begin());

	    int& ref1 =	a1.front();
	    int& ref2 =	a2.front();

	    std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' '	<< ref1	<< ' '
       << ref2 << '\n';
	    a1.swap(a2);
	    std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' '	<< ref1	<< ' '
       << ref2 << '\n';

	    //	Note that after	swap the iterators and references stay associ-
       ated with their
	    // original	elements, e.g. it1 that	pointed	to an element in  'a1'
       with value 2
	    // still points to the same	element, though	this element was moved
       into 'a2'.
	}

Output:
	{ 1 2 3	} { 4 5	} 2 5 1	4
	{ 4 5 }	{ 1 2 3	} 2 5 1	4

See also
	  std::swap(std::vector) specializes the std::swap algorithm
				 (function template)

http://cppreference.com		  2022.07.31		  std::vector::swap(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::vector::swap&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help