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)