Класс deque
Класс deque определен в пространстве имен std, его определение расположено в заголовочном файле <deque> и имеет следующий вид:
template<class T, class A = allocator<T> >
class std::deque
{
public:
// типы
typedef typename A::reference reference;
typedef typename A::const_reference const_reference;
typedef implementation_defined iterator;
typedef implementation_defined const_iterator;
typedef implementation_defined size_type;
typedef implementation_defined difference_type;
typedef T value_type;
typedef A allocator_type;
typedef typename A::pointer pointer;
typedef typename A::const_pointer const_pointer;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
// конструкторы и деструкторы
explicit deque(const A& alloc = A());
explicit deque(size_type n, const T& value = T(), const A& alloc = A());
template<class In>
deque(In first, In last, const A& alloc = A());
deque(const deque<T,A>& x);
~deque();
// присвоение
deque<T,A>& operator=(const deque<T,A>& x);
template<class In>
void assign(In first, In last);
void assign(size_type n, const T& t);
// прямые итераторы
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 end() const;
// размер
size_type size() const;
size_type max_size() const;
void resize(size_type n, 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_refernce front() const;
reference back();
const_refernce back() const;
// модификация
void push_front(const T& x);
void push_back(const T& x);
void pop_front();
void pop_back();
iterator insert(iterator pos, const T& x);
void insert(iterator pos, size_type n, const T& x);
template<class In>
void insert(iterator pos, In first, In last);
iterator erase(iterator pos);
iterator erase(iterator first, iterator last);
void swap(deque<T,A>& x)
void clear();
};
Все перечисленные типы и операции имеют такой же смысл, как и их аналоги в классе вектор, отсутствуют методы capacity() и reserve(). Кроме этого присутствуют операции вставки/удаления элемента в начало дека, которые отсутствуют в vector, но присутствуют в list.
Класс deque как и класс vector поддерживает итераторы произвольного доступа, для этих итераторов применимы операции operator* (оператор разыменования) – получение значения элемента, на который указывает итератор, operator++ - переход к следующему элементу последовательности, а также использование итератора в арифметических выражения для получения итератора указывающего на соответствующий элемент.
1За исключением требования к классу вектор, чтобы все его элементы были расположены в одном фрагменте памяти
2 Более детальные требования к контейнерам можно найти в литературе по С++ или стандарте языка
3 Хотя это не было показано ранее итераторы произвольного доступа также поддерживают operator—для перемещения к предыдущему элементу. Итераторы произвольного доступа поддерживаются для класса vector, string, deque
4 Более детально функциональные объекты или функторы рассматриваются в одной из следующих работ
5 Более детально функциональные объекты или функторы рассматриваются в одной из следующих работ