Глава 10. Объектно-ориентированное программирование
• Функциональный объект (functor) — сокрытие функции в объекте для
использования другими компонентами.
10.7.2
Контейнеры
Будем считать, что стандартная библиотека реализует следующие контейне-
ры:
• vector — линейный массив (особенно эффективен при добавлении элемен-
тов в конец);
• list — двусвязаный список (более эффективен при вставке и перестановке
элементов);
• set — ассоциативный массив уникальных ключей (математический тип
множество);
• multiset — ассоциативный массив с возможностью дублирования ключей;
• bitset — массив, обеспечивающий компактное хранение заданного коли-
чества битов;
• map — ассоциативный массив с уникальными ключами и значениями (хорош
при поиске по ключу);
• multimap — ассоциативный массив с возможностью дублирования ключей
и значений;
• stack — структура данных типа стек;
• queue — структура данных типа очередь;
• priorityqueue — очередь с приоритетами;
• deque — очередь с двухсторонним доступом.
Например, стек целых чисел можно объявить так:
stack s;
С чуть большими затратами можно заставить работать контейнеры с соб-
ственным типом данных.
Основные методы, которые присутствуют почти во всех коллекциях стандарт-
ной библиотеки, приведены ниже.
• empty — определяет, является ли коллекция пустой.
• size — определяет размер коллекции.
• begin, end — указывают на начало и конец коллекции.
• rbegin, rend — то же, но для желающих пройти коллекцию от конца к
началу.
• clear — удаляет все элементы коллекции (если в коллекции сохранены
указатели, нужно ещё удалить все элементы вручную вызовом delete).
• erase — удаляет элемент или несколько элементов из коллекции.
• capacity — вместимость коллекции определяет реальный размер — то есть
размер буфера коллекции, а не то, сколько в нём хранится элементов. Ко-
гда вы создаёте коллекцию, то выделяется некоторое количество памяти.
Как только размер буфера оказывается меньшим, чем размер, необходимый
для хранения всех элементов коллекции, происходит выделение памяти для
нового буфера, а все элементы старого копируются в новый буфер.
Программирование на языке С++ в среде Qt Creator
10.7. Элементы стандартной библиотеки C++
323
• insert — вставка элемента в произвольном месте последовательности
Есть также и необязательные операции: front, back, push_front, push_back,
pop_front
, pop_back, и оператор [].
10.7.3
Итераторы
Итератор (iterator) согласно Википедии — объект, позволяющий програм-
мисту перебирать все элементы коллекции без учёта особенностей её реализации.
В простейшем случае итератором в низкоуровневых языках является указатель.
В C++ есть несколько разных типов итераторов (табл. 10.4):
Таблица 10.4: Типы итераторов
Итератор
Описание
input_iterator
(для чте-
ния)
Читают значения с движением вперёд. Мо-
гут быть инкрементированы, сравнены и
разыменованы.
output_iterator
(для запи-
си)
Пишут значения с движением вперёд. Могут
быть инкрементированы и разыменованы.
forward_iterator
(однона-
правленные)
Читают или пишут значения с движени-
ем вперёд. Комбинируют функциональность
предыдущих двух типов с возможностью со-
хранять значение итератора.
bidirectional_iterator
(двунаправленные)
Читают и пишут значения с движением впе-
рёд или назад. Похожи на однонаправлен-
ные, но их также можно инкрементировать
и декрементировать.
random_iterator
(с произ-
вольным доступом)
Читают и пишут значения с произвольным
доступом. Самые мощные итераторы, со-
четающие функциональность двунаправлен-
ных итераторов и возможность выполнения
арифметики указателей и сравнений указа-
телей.
reverse_iterator
(обрат-
ные)
Или итераторы с произвольным доступом,
или двунаправленные, движущиеся в обрат-
ном направлении.
Итераторы обычно используются парами: один для указания текущей пози-
ции, а второй для обозначения конца коллекции элементов. Итераторы созда-
ются объектом-контейнером, используя стандартные методы begin() и end().
Функция begin()возвращает указатель на первый элемент, а end() — на вооб-
ражаемый несуществующий элемент, следующий за последним.
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.
324
Do'stlaringiz bilan baham: |