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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::deque - std::deque

Synopsis
	  Defined in header <deque>
	  template<

	  class	T,							   (1)
	  class	Allocator = std::allocator<T>

	  > class deque;
	  namespace pmr	{

	  template <class T>						   (2)
       (since C++17)
	  using	deque =	std::deque<T, std::pmr::polymorphic_allocator<T>>;

	  }

	  std::deque  (double-ended  queue)  is	 an indexed sequence container
       that allows fast
	  insertion and	deletion at both its beginning and its end.  In	 addi-
       tion, insertion and
	  deletion at either end of a deque never invalidates pointers or ref-
       erences to the
	  rest of the elements.

	  As  opposed  to  std::vector,	the elements of	a deque	are not	stored
       contiguously:
	  typical implementations use a	 sequence  of  individually  allocated
       fixed-size arrays,
	  with	additional  bookkeeping,  which	 means indexed access to deque
       must perform two
	  pointer dereferences,	compared to vector's indexed access which per-
       forms only one.

	  The storage of a deque is automatically expanded and	contracted  as
       needed. Expansion
	  of a deque is	cheaper	than the expansion of a	std::vector because it
       does not
	  involve  copying  of the existing elements to	a new memory location.
       On the other
	  hand,	deques typically have large minimal memory cost; a deque hold-
       ing just	one
	  element has to allocate its full internal array (e.g.	 8  times  the
       object size on
	  64-bit  libstdc++; 16	times the object size or 4096 bytes, whichever
       is larger, on
	  64-bit libc++).

	  The complexity (efficiency) of common	operations  on	deques	is  as
       follows:

	    * Random access - constant O(1)
	    *  Insertion or removal of elements	at the end or beginning	- con-
       stant O(1)
	    * Insertion	or removal of elements - linear	O(n)

	  std::deque meets the requirements of	Container,  AllocatorAwareCon-
       tainer,
	  SequenceContainer and	ReversibleContainer.

Template parameters
		      The type of the elements.

		      T	 must  meet  the  requirements	of  CopyAssignable and
       (until C++11)
		      CopyConstructible.
	  T	    - The requirements that are	imposed	on the elements	depend
		      on the actual operations performed on the	container.
		      Generally, it is required	that element type  is  a  com-
       plete  (since C++11)
		      type and meets the requirements of Erasable, but many
		      member functions impose stricter requirements.
		      An  allocator that is used to acquire/release memory and
       to
		      construct/destroy	the elements in	that memory. The  type
       must meet the
		      requirements of Allocator.
	  Allocator - The behavior is undefined
		      (until C++20)
		      The program is ill-formed
		      (since  C++20)  if Allocator::value_type is not the same
       as T.

	 Iterator invalidation

	   This	section	is incomplete
	   Reason: There are still a few inaccuracies in this  section,	 refer
       to individual
	   member function pages for more detail

		   Operations				     Invalidated
	  All read only	operations	Never
	  swap,	 std::swap		  The past-the-end iterator may	be in-
       validated
					(implementation	defined)
	  shrink_to_fit, clear,	insert,
	  emplace, push_front,		Always
	  push_back, emplace_front,
	  emplace_back
					If erasing at begin - only erased ele-
       ments

	  erase				If erasing at end - only  erased  ele-
       ments and the
					past-the-end iterator
					Otherwise  - all iterators are invali-
       dated (including
					the past-the-end iterator).
					If the new size	is  smaller  than  the
       old one : only
					erased elements	and the
					past-the-end iterator
	  resize
					If the new size	is bigger than the old
       one : all
					iterators are invalidated
					Otherwise - none iterators are invali-
       dated.
	  pop_front			Only to	the element erased
	  pop_back			 Only  to  the	element	erased and the
       past-the-end
					iterator

	   Invalidation	notes

	    * When inserting at	either end of the deque,  references  are  not
       invalidated by
	      insert and emplace.
	    * push_front, push_back, emplace_front and emplace_back do not in-
       validate	any
	      references to elements of	the deque.
	    *  When  erasing  at  either  end of the deque, references to non-
       erased elements are
	      not invalidated by erase,	pop_front and pop_back.
	    * A	call to	resize with a smaller size  does  not  invalidate  any
       references to
	      non-erased elements.
	    * A	call to	resize with a bigger size does not invalidate any ref-
       erences to
	      elements of the deque.

Member types
	  Member type		 Definition
	  value_type		 T
	  allocator_type	 Allocator
	  size_type		 Unsigned integer type (usually	std::size_t)
	  difference_type	 Signed	integer	type (usually std::ptrdiff_t)
	  reference		 value_type&
	  const_reference	 const value_type&
	  pointer					    Allocator::pointer
       (until C++11)
				 std::allocator_traits<Allocator>::pointer
       (since C++11)
	  const_pointer				      Allocator::const_pointer
       (until C++11)
				 std::allocator_traits<Alloca-
       tor>::const_pointer (since C++11)
	  iterator		 LegacyRandomAccessIterator to value_type
	  const_iterator	     LegacyRandomAccessIterator	   to	 const
       value_type
	  reverse_iterator	 std::reverse_iterator<iterator>
	  const_reverse_iterator std::reverse_iterator<const_iterator>

Member functions
	  constructor	constructs the deque
			(public	member function)
	  destructor	destructs the deque
			(public	member function)
	  operator=	assigns	values to the container
			(public	member function)
	  assign	assigns	values to the container
			(public	member function)
	  get_allocator	returns	the associated allocator
			(public	member function)

Element	access
	  at		access specified element with bounds checking
			(public	member function)
	  operator[]	access specified element
			(public	member function)
	  front		access the first element
			(public	member function)
	  back		access the last	element
			(public	member function)

Iterators
	  begin		returns	an iterator to the beginning
	  cbegin	(public	member function)
	  (C++11)
	  end		returns	an iterator to the end
	  cend		(public	member function)
	  (C++11)
	  rbegin	returns	a reverse iterator to the beginning
	  crbegin	(public	member function)
	  (C++11)
	  rend		returns	a reverse iterator to the end
	  crend		(public	member function)
	  (C++11)

Capacity
	  empty		checks whether the container is	empty
			(public	member function)
	  size		returns	the number of elements
			(public	member function)
	  max_size	returns	the maximum possible number of elements
			(public	member function)
	  shrink_to_fit	reduces	memory usage by	freeing	unused memory
	  (C++11)	(public	member function)

Modifiers
	  clear		clears the contents
			(public	member function)
	  insert	inserts	elements
			(public	member function)
	  emplace	constructs element in-place
	  (C++11)	(public	member function)
	  erase		erases elements
			(public	member function)
	  push_back	adds an	element	to the end
			(public	member function)
	  emplace_back	constructs an element in-place at the end
	  (C++11)	(public	member function)
	  pop_back	removes	the last element
			(public	member function)
	  push_front	inserts	an element to the beginning
			(public	member function)
	  emplace_front	constructs an element in-place at the beginning
	  (C++11)	(public	member function)
	  pop_front	removes	the first element
			(public	member function)
	  resize	changes	the number of elements stored
			(public	member function)
	  swap		swaps the contents
			(public	member function)

Non-member functions
	  operator==
	  operator!=
	  operator<
	  operator<=
	  operator>
	  operator>=		lexicographically compares the values  in  the
       deque
	  operator<=>		(function template)
	  (removed in C++20)
	  (removed in C++20)
	  (removed in C++20)
	  (removed in C++20)
	  (removed in C++20)
	  (C++20)
	  std::swap(std::deque)	specializes the	std::swap algorithm
				(function template)
	  erase(std::deque)	Erases all elements satisfying specific	crite-
       ria
	  erase_if(std::deque)	(function template)
	  (C++20)

	 Deduction guides(since	C++17)

Example
       // Run this code

	#include <iostream>
	#include <deque>

	int main()
	{
	    // Create a	deque containing integers
	    std::deque<int> d =	{7, 5, 16, 8};

	    // Add an integer to the beginning and end of the deque
	    d.push_front(13);
	    d.push_back(25);

	    // Iterate and print values	of deque
	    for(int n :	d) {
		std::cout << n << ' ';
	    }
	}

Output:
	13 7 5 16 8 25

See also
	  queue	adapts a container to provide queue (FIFO data structure)
		(class template)

http://cppreference.com		  2022.07.31			 std::deque(3)

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

home | help