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 addition,
     insertion and
	deletion at either end of a deque never invalidates pointers  or  refer-
     ences to the
	rest of the elements.

	As  opposed  to std::vector, the elements of a deque are not stored con-
     tiguously:
	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 performs
     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 holding
     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 fol-
     lows:

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

	std::deque meets the requirements of Container, AllocatorAwareContainer,
	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	complete
     (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  invali-
     dated
				      (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	elements
     and the
				      past-the-end iterator.
				      Otherwise - all iterators are invalidated.

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

				      The past-the-end iterator is also  invali-
     dated unless
				      the erased
				      elements	are at the beginning of the con-
     tainer 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 inval-
     idated by
	    insert and emplace.
	  * push_front, push_back, emplace_front and emplace_back do not invali-
     date 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  refer-
     ences to
	    non-erased elements.
	  *  A	call to resize with a bigger size does not invalidate any refer-
     ences 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<Allocator>::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 de-
     ques
	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 criteria
	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  in-
     sertion 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  Copy-
     Constructible
			   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)

home | help