Контейнеры 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()) не проверяют правильность индексов и итераторов.
  • Вставка или удаление элементов может привести к перераспределению памяти. Это означает, что в результате любой вставки или
    удаления могут стать недействительными все указатели, ссылки и итераторы, ссылающиеся на другие элементы дека. Данное
    утверждение не относится к вставке элементов в начало или конец дека - в этом случае ссылки и указатели на элементы (но не
    итераторы!) остаются действительными.

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



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

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