template <class T>
class circular_deque
Defined at line 391 of file ../../src/lib/containers/cpp/circular_deque.h
Public Methods
void circular_deque<T> ()
---------------------------------------------------------------------------
Constructor
Defined at line 412 of file ../../src/lib/containers/cpp/circular_deque.h
void circular_deque<T> (size_type count)
Constructs with |count| copies of |value| or default constructed version.
Defined at line 415 of file ../../src/lib/containers/cpp/circular_deque.h
void circular_deque<T> (size_type count, const T & value)
Defined at line 416 of file ../../src/lib/containers/cpp/circular_deque.h
template <class InputIterator>
void circular_deque<T> (InputIterator first, InputIterator last)
Range constructor.
Defined at line 420 of file ../../src/lib/containers/cpp/circular_deque.h
void circular_deque<T> (const circular_deque<T> & other)
Copy/move.
Defined at line 425 of file ../../src/lib/containers/cpp/circular_deque.h
void circular_deque<T> (circular_deque<T> && other)
Defined at line 428 of file ../../src/lib/containers/cpp/circular_deque.h
void circular_deque<T> (std::initializer_list<value_type> init)
Defined at line 434 of file ../../src/lib/containers/cpp/circular_deque.h
void ~circular_deque<T> ()
Defined at line 436 of file ../../src/lib/containers/cpp/circular_deque.h
circular_deque<T> & operator= (const circular_deque<T> & other)
---------------------------------------------------------------------------
Assignments.
All of these may invalidate iterators and references.
Defined at line 443 of file ../../src/lib/containers/cpp/circular_deque.h
circular_deque<T> & operator= (circular_deque<T> && other)
Defined at line 451 of file ../../src/lib/containers/cpp/circular_deque.h
circular_deque<T> & operator= (std::initializer_list<value_type> ilist)
Defined at line 468 of file ../../src/lib/containers/cpp/circular_deque.h
void assign (size_type count, const value_type & value)
Defined at line 474 of file ../../src/lib/containers/cpp/circular_deque.h
template <typename InputIterator>
typename std::enable_if< ::containers::internal::is_iterator<InputIterator>::value, void>::type assign (InputIterator first, InputIterator last)
This variant should be enabled only when InputIterator is an iterator.
Defined at line 484 of file ../../src/lib/containers/cpp/circular_deque.h
void assign (std::initializer_list<value_type> value)
Defined at line 495 of file ../../src/lib/containers/cpp/circular_deque.h
const value_type & at (size_type i)
---------------------------------------------------------------------------
Accessors.
Since this class assumes no exceptions, at() and operator[] are equivalent.
Defined at line 505 of file ../../src/lib/containers/cpp/circular_deque.h
value_type & at (size_type i)
Defined at line 512 of file ../../src/lib/containers/cpp/circular_deque.h
value_type & operator[] (size_type i)
Defined at line 516 of file ../../src/lib/containers/cpp/circular_deque.h
const value_type & operator[] (size_type i)
Defined at line 517 of file ../../src/lib/containers/cpp/circular_deque.h
value_type & front ()
Defined at line 521 of file ../../src/lib/containers/cpp/circular_deque.h
const value_type & front ()
Defined at line 525 of file ../../src/lib/containers/cpp/circular_deque.h
value_type & back ()
Defined at line 530 of file ../../src/lib/containers/cpp/circular_deque.h
const value_type & back ()
Defined at line 534 of file ../../src/lib/containers/cpp/circular_deque.h
iterator begin ()
---------------------------------------------------------------------------
Iterators.
Defined at line 542 of file ../../src/lib/containers/cpp/circular_deque.h
const_iterator begin ()
Defined at line 543 of file ../../src/lib/containers/cpp/circular_deque.h
const_iterator cbegin ()
Defined at line 544 of file ../../src/lib/containers/cpp/circular_deque.h
iterator end ()
Defined at line 546 of file ../../src/lib/containers/cpp/circular_deque.h
const_iterator end ()
Defined at line 547 of file ../../src/lib/containers/cpp/circular_deque.h
const_iterator cend ()
Defined at line 548 of file ../../src/lib/containers/cpp/circular_deque.h
reverse_iterator rbegin ()
Defined at line 550 of file ../../src/lib/containers/cpp/circular_deque.h
const_reverse_iterator rbegin ()
Defined at line 551 of file ../../src/lib/containers/cpp/circular_deque.h
const_reverse_iterator crbegin ()
Defined at line 552 of file ../../src/lib/containers/cpp/circular_deque.h
reverse_iterator rend ()
Defined at line 554 of file ../../src/lib/containers/cpp/circular_deque.h
const_reverse_iterator rend ()
Defined at line 555 of file ../../src/lib/containers/cpp/circular_deque.h
const_reverse_iterator crend ()
Defined at line 556 of file ../../src/lib/containers/cpp/circular_deque.h
void reserve (size_type new_capacity)
IMPORTANT NOTE ON reserve(...): This class implements auto-shrinking of
the buffer when elements are deleted and there is "too much" wasted space.
So if you call reserve() with a large size in anticipation of pushing many
elements, but pop an element before the queue is full, the capacity you
reserved may be lost.
As a result, it's only worthwhile to call reserve() when you're adding
many things at once with no intermediate operations.
Defined at line 569 of file ../../src/lib/containers/cpp/circular_deque.h
size_type capacity ()
Defined at line 574 of file ../../src/lib/containers/cpp/circular_deque.h
void shrink_to_fit ()
Defined at line 579 of file ../../src/lib/containers/cpp/circular_deque.h
void clear ()
This will additionally reset the capacity() to 0.
Defined at line 594 of file ../../src/lib/containers/cpp/circular_deque.h
bool empty ()
Defined at line 601 of file ../../src/lib/containers/cpp/circular_deque.h
size_type size ()
Defined at line 603 of file ../../src/lib/containers/cpp/circular_deque.h
void resize (size_type count)
When reducing size, the elements are deleted from the end. When expanding
size, elements are added to the end with |value| or the default
constructed version. Even when using resize(count) to shrink, a default
constructor is required for the code to compile, even though it will not
be called.
There are two versions rather than using a default value to avoid
creating a temporary when shrinking (when it's not needed). Plus if
the default constructor is desired when expanding usually just calling it
for each element is faster than making a default-constructed temporary and
copying it.
Defined at line 620 of file ../../src/lib/containers/cpp/circular_deque.h
void resize (size_type count, const value_type & value)
Defined at line 639 of file ../../src/lib/containers/cpp/circular_deque.h
void insert (const_iterator pos, size_type count, const T & value)
---------------------------------------------------------------------------
Insert and erase.
Insertion and deletion in the middle is O(n) and invalidates all existing
iterators.
The implementation of insert isn't optimized as much as it could be. If
the insertion requires that the buffer be grown, it will first be grown
and everything moved, and then the items will be inserted, potentially
moving some items twice. This simplifies the implemntation substantially
and means less generated templatized code. Since this is an uncommon
operation for deques, and already relatively slow, it doesn't seem worth
the benefit to optimize this.
Defined at line 669 of file ../../src/lib/containers/cpp/circular_deque.h
template <class InputIterator>
typename std::enable_if< ::containers::internal::is_iterator<InputIterator>::value, void>::type insert (const_iterator pos, InputIterator first, InputIterator last)
This enable_if keeps this call from getting confused with the (pos, count,
value) version when value is an integer.
Defined at line 694 of file ../../src/lib/containers/cpp/circular_deque.h
iterator insert (const_iterator pos, const T & value)
These all return an iterator to the inserted item. Existing iterators will
be invalidated.
Defined at line 729 of file ../../src/lib/containers/cpp/circular_deque.h
iterator insert (const_iterator pos, T && value)
Defined at line 730 of file ../../src/lib/containers/cpp/circular_deque.h
template <class... Args>
iterator emplace (const_iterator pos, Args &&... args)
Defined at line 732 of file ../../src/lib/containers/cpp/circular_deque.h
iterator erase (const_iterator pos)
Calling erase() won't automatically resize the buffer smaller like resize
or the pop functions. Erase is slow and relatively uncommon, and for
normal deque usage a pop will normally be done on a regular basis that
will prevent excessive buffer usage over long periods of time. It's not
worth having the extra code for every template instantiation of erase()
to resize capacity downward to a new buffer.
Defined at line 758 of file ../../src/lib/containers/cpp/circular_deque.h
iterator erase (const_iterator first, const_iterator last)
Defined at line 759 of file ../../src/lib/containers/cpp/circular_deque.h
void push_front (const T & value)
---------------------------------------------------------------------------
Begin/end operations.
Defined at line 807 of file ../../src/lib/containers/cpp/circular_deque.h
void push_front (T && value)
Defined at line 808 of file ../../src/lib/containers/cpp/circular_deque.h
void push_back (const T & value)
Defined at line 810 of file ../../src/lib/containers/cpp/circular_deque.h
void push_back (T && value)
Defined at line 811 of file ../../src/lib/containers/cpp/circular_deque.h
template <class... Args>
reference emplace_front (Args &&... args)
Defined at line 814 of file ../../src/lib/containers/cpp/circular_deque.h
template <class... Args>
reference emplace_back (Args &&... args)
Defined at line 826 of file ../../src/lib/containers/cpp/circular_deque.h
void pop_front ()
Defined at line 837 of file ../../src/lib/containers/cpp/circular_deque.h
void pop_back ()
Defined at line 852 of file ../../src/lib/containers/cpp/circular_deque.h
void swap (circular_deque<T> & other)
---------------------------------------------------------------------------
General operations.
Defined at line 869 of file ../../src/lib/containers/cpp/circular_deque.h
Friends
template <class T>
void circular_deque (circular_deque<T> & lhscircular_deque<T> & rhs)