Контейнеры STL. Операции над деками

   
На этом шаге мы перечислим основные операции над деками.

   
В таблицах 1 - 3 перечислены все операции, поддерживаемые деками.

Таблица 1. Конструкторы и деструктор деков

Операция Описание
deque<Elem> с Создает пустой дек, не содержащий ни одного элемента
deque<Elem> с1(c2) Создает копию другого дека того же типа (с копированием всех элементов)
deque<Elem> c(n) Создает дек из n элементов, создаваемых конструктором по умолчанию
deque<Elem> c(n,elem) Создает дек, инициализируемый n копиями эпемента elem
deque<Elem> c(beg,end) Создает дек, инициализируемый элементами интервала [beg,end)
c.~deque<Elem>() Уничтожает все элементы и освобождает память

Таблица 2. Немодифицирующие операции над деками

Операция Описание
c.size() Возвращает фактическое количество элементов
c.empty() Проверяет, пуст ли контейнер (эквивалент size()==0, но иногда выполняется быстрее)
c.max_size() Возвращает максимально возможное количество элементов
c1 == c2 Проверяет равенство c1 и с2
c1 != c2 Проверяет неравенство c1 и с2 (эквивалент !(c1==c2))
c1 < с2 Проверяет, что c1 меньше с2
c1 > с2 Проверяет, что c1 больше с2 (эквивалент c2<c1)
c1 <= с2 Проверяет, что c1 не больше с2 (эквивалент !(c2<c1))
c1 >= с2 Проверяет, что c1 не меньше с2 (эквивалент !(с1<с2))
c.at(idx) Возвращает элемент с индексом idx (при недопустимом значении индекса генерируется исключение out_of_range)
c[idx] Возвращает элемент с индексом idx (без интервальной проверки!)
c.front() Возвращает первый элемент (без проверки его существования!)
c.back() Возвращает последний элемент (без проверки его существования!)
c.rbegin() Возвращает обратный итератор для первого элемента при переборе в обратном направлении
c.rend() Возвращает обратный итератор для позиции за последним элементом при переборе в обратном направлении

Таблица 3. Модифицирующие операции над деками

Операция Описание
c1 = c2 Присваивает c1 все элементы с2
c.assign(n,elem) Присваивает n копий элемента elem
c.assign(beg,end) Присваивает элементы интервала [beg,end)
c1.swap(c2) Меняет местами содержимое c1 и с2
swap(c1,c2) To же, но в форме глобальной функции
c.insert(pos,elem) Вставляет копию elem в позицию итератора pos и возвращает позицию нового элемента
c.insert(pos,n,elem) Вставляет n копий elem в позицию итератора pos (и не возвращает значения)
c.insert(pos,beg,end) Вставляет в позицию итератора pos копию всех элементов интервала [beg,end) (и не возвращает значения)
c.push_back(elem) Присоединяет копию elem в конец дека
c.pop_back() Удаляет последний элемент (не возвращая его)
c.push_front(elem) Вставляет копию elem в начало дека
c.pop_front() Удаляет первый элемент (не возвращая его)
c.erase(pos) Удаляет элемент в позиции итератора pos и возвращает позицию следующего элемента
c.erase(beg,end) Удаляет все элементы из интервала [beg,end) и возвращает позицию следующего элемента
c.resize(num) Приводит контейнер к размеру num (если size() при этом увеличивается, новые элементы создаются своим
конструктором по умолчанию)
c.resize(num,elem) Приводит контейнер к размеру num (если size() при этом увеличивается, новые элементы создаются как копии elem)
c.clear() Удаляет все элементы (контейнер остается пустым)

   
Операции деков отличаются от операций векторов только в следующих отношениях:

  • деки не поддерживают функции, связанные с емкостью (capacity() и reserve());
  • в деках определены прямые функции вставки и удаления первого элемента (push_front() и pop_back()).

   
Поскольку остальные операции остались без изменений, здесь они не рассматриваются. За описаниями обращайтесь на 131 шаг.

   
При работе с деками необходимо учитывать следующее.

  • Функции обращения к элементам (кроме at()) не проверяют правильность индексов и итераторов.
  • Вставка или удаление элементов может привести к перераспределению памяти. Это означает, что в результате любой вставки или
    удаления могут стать недействительными все указатели, ссылки и итераторы, ссылающиеся на другие элементы дека. Данное
    утверждение не относится к вставке элементов в начало или конец дека - в этом случае ссылки и указатели на элементы (но не
    итераторы!) остаются действительными.

   
На следующем шаге мы рассмотрим обработку исключений в деках.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий