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	>
	      using		deque		  =		 std::deque<T,
       (2) (since C++17)
	  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.
		      The requirements that are	imposed	on the elements	depend
	  T	    - 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.

					If erasing at end - only  erased  ele-
       ments and the
					past-the-end iterator.
					Otherwise  - all iterators are invali-
       dated.

					It is unspecified when	the  past-the-
       end iterator is
	  erase				invalidated.
					(until C++11)

					The  past-the-end iterator is also in-
       validated unless
					the erased
					elements are at	the beginning  of  the
       container and the
					last element is	not erased.
					(since C++11)
					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.
					To the element erased.

					The past-the-end iterator
	  pop_front, pop_back		may be invalidated (implementation de-
       fined)
					(until C++11)
					is also	invalidated.
					(since C++11)

	    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&
				 Allocator::pointer
       (until C++11)
	  pointer		     std::allocator_traits<Allocator>::pointer
       (since C++11)

				 Allocator::const_pointer
       (until C++11)
	  const_pointer				 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)
	  assign_range	assigns	a range	of values to the container
	  (C++23)	(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
	  (DR*)		(public	member function)

Modifiers
	  clear		clears the contents
			(public	member function)
	  insert	inserts	elements
			(public	member function)
	  insert_range	inserts	a range	of elements
	  (C++23)	(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)
	  append_range	adds a range of	elements to the	end
	  (C++23)	(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)
	  prepend_range	adds a range of	elements to the	beginning
	  (C++23)	(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  of  two
       deques
	  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)

Notes
	      Feature-test macro       Value	Std		      Feature
	  __cpp_lib_containers_ranges  202202L (C++23) Ranges construction and
       insertion for
						      containers

Example
       // Run this code

	#include <deque>
	#include <iostream>

	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 << ' ';
	    std::cout << '\n';
	}

Output:
	13 7 5 16 8 25

	  Defect reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	    DR	     Applied	to		 Behavior     as     published
       Correct behavior
			     T	was not	required to be CopyConstructible  T is
       also required to
	  LWG 230 C++98	     (an element of type T might not be	 able  to   be
       CopyConstructible
			     be	constructed)

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

Category:
	    * Todo with	reason

http://cppreference.com		  2024.06.10			 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.1.quarterly>

home | help