13.22 deque

   

13.22 <deque>

The <deque> header is one of the standard container template headers. It declares the deque class template and a few global functions that operate on deque objects.

A deque , short for double-ended queue, is similar to a vector, but the performance is constant when adding to or removing from the collection at the beginning and at the end.

If you need a vector of bool that behaves as a normal C++ container, you should use deque<bool> instead of vector<bool> . See <vector> later in this chapter for an explanation.

See Chapter 10 for information about containers in general.

deque class template Double-ended queue

 template <class T, class Alloc = allocator<T> > class  deque  { public:   typedef typename Alloc::reference  reference  ;   typedef typename Alloc::const_reference  const_reference  ;   typedef  . . .  iterator  ;   typedef  . . .  const_iterator  ;   typedef  . . .  size_type  ;   typedef  . . .  difference_type  ;   typedef T  value_type  ;   typedef Alloc  allocator_type  ;   typedef typename Alloc::pointer  pointer  ;   typedef typename Alloc::const_pointer  const_pointer  ;   typedef std::reverse_iterator<iterator>  reverse_iterator  ;   typedef std::reverse_iterator<const_iterator>  const_reverse_iterator  ;   explicit  deque  (const Alloc& = Alloc(  ));   explicit  deque  (size_type n, const T& value = T(  ), const Alloc& = Alloc(  ));   template <class InputIterator>  deque  (InputIterator first, InputIterator last, const Alloc& = Alloc(  ));  deque  (const deque<T,Alloc>& x);  ~deque  (  );       deque<T,Alloc>&  operator=  (const deque<T,Alloc>& x);   template <class InputIterator>   void  assign  (InputIterator first, InputIterator last);   void  assign  (size_type n, const T& t);   allocator_type  get_allocator  (  ) const;       iterator  begin  (  );   const_iterator  begin  (  ) const;   iterator  end  (  );   const_iterator  end  (  ) const;   reverse_iterator  rbegin  (  );   const_reverse_iterator  rbegin  (  ) const;   reverse_iterator  rend  (  );   const_reverse_iterator  rend  (  ) const;       size_type  size  (  ) const;   size_type  max_size  (  ) const;   void  resize  (size_type sz, T c = T(  ));   bool  empty  (  ) const;       reference  operator[]  (size_type n);   const_reference  operator[]  (size_type n) const;   reference  at  (size_type n);   const_reference  at  (size_type n) const;   reference  front  (  );   const_reference  front  (  ) const;   reference  back  (  );   const_reference  back  (  ) const;       void  push_front  (const T& x);   void  push_back  (const T& x);   iterator  insert  (iterator position, const T& x);   void  insert  (iterator position, size_type n, const T& x);   template <class InputIterator>   void  insert  (iterator position, InputIterator first, InputIterator last);   void  pop_front  (  );   void  pop_back  (  );   iterator  erase  (iterator position);   iterator  erase  (iterator first, iterator last);   void  swap  (deque<T,Alloc>&);   void  clear  (  ); }; 

The deque class template represents a double-ended queue. It is one of the standard container types, like list and vector . Like a list, a deque yields amortized, constant performance when adding and removing items from the beginning and end of the container. Like a vector, performance is constant when accessing items at any index in the deque. Performance for inserting or removing items not at the start or end is linear with respect to the size of the container.

After inserting items at the beginning or end of the deque, all iterators become invalid. All references and pointers to items in the deque remain valid. After inserting in the middle of the deque, all iterators, references, and pointers to items in the deque become invalid.

After erasing an element from the beginning or end of the deque, all iterators and references remain valid, except those pointing to the erased element. After erasing an element from the middle of the deque, all iterators, references, and pointers to items in the deque become invalid.

explicit deque (const Alloc& = Alloc( ))

Constructs an empty deque.

explicit deque (size_type n, const T& value = T( ), const Alloc& = Alloc( ))

Constructs a deque with n copies of value .

template <class InputIterator>
deque (InputIterator first, InputIterator last, const Alloc& alloc = Alloc( ))

Constructs a deque with copies of the elements in [ first , last ), unless InputIterator is an integral type, in which case the deque is constructed as though the arguments were cast as follows :

 deque(static_cast<size_type>(first), static_cast<value_type>(last),       alloc); 
template <class InputIterator>
void assign (InputIterator first, InputIterator last)

Erases the current contents of the deque and inserts the elements in [ first , last ), unless InputIterator is an integral type, in which case the arguments are interpreted as though they were cast as follows:

 assign(static_cast<size_type>(first), static_cast<value_type>(last)); 
void assign (size_type n, const T& t)

Erases the current contents of the deque and inserts n copies of t .

allocator_type get_allocator ( ) const

Returns the allocator object.

reference operator[] (size_type n)
const_reference operator[] (size_type n) const

Returns the element at index n . If n >= size( ) , the behavior is undefined.

reference at (size_type n)
const_reference at (size_type n) const

Returns the element at index n . If n >= size( ) , it throws out_of_range .

reference back ( )
const_reference back ( ) const

Returns the last element in the deque. The behavior is undefined if the deque is empty.

iterator begin ( )
const_iterator begin ( ) const

Returns an iterator that points to the first element of the deque.

void clear ( )

Erases all elements from the deque.

bool empty ( ) const

Returns size( ) == .

iterator end ( )
const_iterator end ( ) const

Returns an iterator that points to the last element of the deque.

iterator erase (iterator position)

Erases the element at position .

iterator erase (iterator first, iterator last)

Erases all the elements in the range [ first , last ).

reference front ( )
const_reference front ( ) const

Returns the first element of the deque. The behavior is undefined if the deque is empty.

iterator insert (iterator position, const T& x)

Inserts x at position . If position is begin( ) or end( ) , the performance is constant; at any other position, the performance is linear.

void insert (iterator pos, size_type n, const T& x)

Inserts n copies of x at pos .

template <class InputIterator>
void insert (iterator position, InputIterator first, InputIterator last)

Inserts the elements in the range [ first , last ) starting at position , unless InputIterator is an integral type, in which case the arguments are interpreted as though they were cast:

 insert(position, static_cast<size_type>(first),                  static_cast<value_type>(last)); 

If an exception is thrown, such as bad_alloc when there is insufficient memory for a new element, the deque is unchanged, and all iterators and references remain valid. If the exception is thrown from an element's copy constructor or assignment operator, however, the behavior is unspecified.

size_type max_size ( ) const

Returns the size of the largest possible deque.

void pop_front ( )

Erases the first element of the deque. The behavior is undefined if the deque is empty.

void pop_back ( )

Erases the last element of the deque. The behavior is undefined if the deque is empty.

void push_front (const T& x)

Inserts x as the new first element of the deque.

void push_back (const T& x)

Inserts x as the new last element of the deque.

reverse_iterator rbegin ( )
const_reverse_iterator rbegin ( ) const

Returns a reverse iterator that points to the last element of the deque.

reverse_iterator rend ( )
const_reverse_iterator rend ( ) const

Returns a reverse iterator that points to one position before the first element of the deque.

size_type size ( ) const

Returns the number of elements in the deque.

void resize (size_type n, T c = T( ))

Changes the size of the deque to n . If n > size( ) , one or more copies of c are added to the end of the deque to reach the desired size. If the new size is smaller than the current size, the first n elements are unchanged, and elements are erased from the end to reach the new size.

void swap (deque<T,Alloc>& that)

Exchanges all the elements in the deque with all the elements in that .

See Also

<list> , <vector>

operator== function template Compares two deques for equality

 template<typename T, typename A> bool  operator==  (const deque<T,A>& x, const deque<T,A>& y) 

The == operator returns true if x and y are the same size and their elements are equal, that is, x.size( ) == y.size( ) && equals(x.begin( ) , x.end( ) , y.begin( )) .

See Also

equals in <algorithm>

operator!= function template Compares two deques for inequality

 template<typename T, typename A> bool  operator!=  (const deque<T,A>& x, const deque<T,A>& y) 

The != operator is equivalent to ! (x == y) .

operator< function template Compares two deques for less-than

 template<typename T, typename A> bool  operator<  (const deque<T,A>& x, const deque<T,A>& y) 

The < operator determines whether x is less than y using the same algorithm as lexicographical_compare(x.begin( ) , x.end( ) , y.begin( ) , y.end( )) .

See Also

lexicographical_compare in <algorithm>

operator<= function template Compares two deques for less-than-or-equal

 template<typename T, typename A> bool  operator<=  (const deque<T,A>& x, const deque<T,A>& y) 

The <= operator is equivalent to ! (y < x) .

operator> function template Compares two deques for greater-than

 template<typename T, typename A> bool  operator>  (const deque<T,A>& x, const deque<T,A>& y) 

The > operator is equivalent to (y < x) .

operator>= function template Compares two deques for greater-than-or-equal

 template<typename T, typename A> bool  operator>=  (const deque<T,A>& x, const deque<T,A>& y) 

The >= operator is equivalent to ! (x < y) .

swap function template specialization Swaps the contents of two deques

 template<typename T, typename Alloc> void  swap  (deque<T, Alloc>& x, deque<T, Alloc>& y) 

The swap function template specialization is equivalent to calling x.swap(y) .

See Also

swap in <algorithm>

   


C++ in a Nutshell
C++ in a Nutshell
ISBN: 059600298X
EAN: 2147483647
Year: 2005
Pages: 270
Authors: Ray Lischner

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net