SlideShare a Scribd company logo
1 of 19
КОНТЕЙНЕРЫ STL
Михаил Кройтор
Содержание











Итераторы
Свойства итераторов
Контейнеры
Общие свойства контейнеров
Последовательные контейнеры
Ассоциативные контейнеры
Использование контейнеров
рекомендации
Обозначения









обозначения
Х - некторый класс (контейнер);
u, a, b - объекты класса X;
r - итератор;
T - значимый тип (элементов контейнера);
t - значение типа T;
n - целочисленное значение.
Итераторы


Итератор - объект, предоставляющий доступ к
элементам контейнера и позволяющий их
перебирать.
ВИДЫ ИТЕРАТОРОВ
Итератор вывода

Итератор ввода

Последовательный итератор

Двунаправленный итератор
Итератор произв. доступа
Итераторы










Итератор ввода (input iterator) – позволяет
получать значения элементов контейнера;
Итератор вывода (output iterator) – позволяет
изменять значения элементов контейнера;
Последовательный итератор (forward iterator) –
гарантируют последовательный перебор
элементов;
Двунаправленный итератор (bidirectional iterator)
– позволяют перебирать элементы контейнера как
в прямом, так и в обратном порядке;
Итератор произвольного доступа (random access
iterator) – ;
Свойства итераторов:
итераторы ввода
Свойство

Пояснение

X(a)
X u(a);
X u = a;

Конструктор копирования. Предполагается наличие
деструктора

a = b;

Оператор копирования.

a==b;
a != b;

Операторы сравнения

*a;

Оператор разыменования. Возвращается ссылка на объект
из контейнера.

++r;
r++;

Последовательный перебор итераторов

NB: Итераторы ввода не гарантируют,
что если a == b, то a++ == b++
Свойства итераторов:
итераторы вывода
Свойство

Пояснение

X(a)
X u(a);
X u = a;

Конструктор копирования. Предполагается наличие
деструктора

*a = t;

Оператор разыменования. Возвращается ссылка на объект
из контейнера.

++r;
r++;

Последовательный перебор итераторов
Свойства итераторов:
последовательные итераторы
Свойство

Пояснение

Обладает всеми свойствами итераторов ввода и вывода
a==b;
a != b;

Операторы сравнения.
a == b => ++a == ++b
Свойства итераторов:
двунаправленные итераторы
Свойство

Пояснение

Обладает всеми свойствами последовательных итераторов
--r;
r--;

Последовательный перебор итераторов
Свойства итераторов:
итераторы произвольного доступа
Свойство

Пояснение

Обладает всеми свойствами двунаправленных итераторов
r += n;
r –= n;

Сдвиг на n элементов от итератора r

r + n;
n + r;
r – n;

Сдвиг на n элементов от итератора а

b – a;

Расстояние между итераторами

a[n]

Последовательный перебор итераторов

a > b;
a < b;
a ≥ b;
a ≤ b;

Операторы упорядочения.
Контейнеры






под контейнером понимают объект, содержащий другие
(обычно однотипные) объекты.
Доступ к элементом контейнера осуществляется через
итераторы.
Контейнеры С++ представляют собой шаблонные классы
с общим базовым интерфейсом.
Конетйнеры
Последовательные




Список (list)
Очередь (deque)
Вектор (vector)

Ассоциативные






Множество (set)
Хеш-массив (map)
Множество с
повторами (multiset)
Хеш-массив с
повторами (multimap)
Контейнеры: структура
выражение

значение

X::value_type

Равен типу T

X::reference

Равен типу T&

X::iterator

тип итератора, указывает на X::reference

X::const_iterator

Константный итератор

X()

Конструктор по умолчанию

X(a)

Конструктор копирования

a.begin()

Возвращает Iterator; const_iterator для постоянного a

a.end()

Возвращает Iterator; const_iterator для постоянного a

a.size()

Возвращает размер контейнера

a.empty()

Проверяет, если контейнер пустой

…

…
Последовательные контейнеры:
общие свойства
выражение

значение

X(n, t)
X a(n, t);
X(i, j)
X a(i, j);
a.insert(p, t)
a.insert(p, n, t)

после: size() == n.
создаёт последовательность с n копиями t.
после: size() == расстоянию между i и j.
создаёт последовательность, равную диапазону *i, j).
вставляет копию t перед p.
возвращаемое значение указывает на вставленную копию.
вставляет n копий t перед p.

a.insert(p, i, j)

вставляет копии элементов из диапазона *i, j) перед p.

a.erase(q)

удаляет элемент, указываемый q.

a.erase(ql, q2)

удаляет элементы в диапазоне *ql, q2).
Последовательные контейнеры:
дополнительные свойства
выражение

семантика

контейнер

a.front()

*a.begin()

vector, list, deque

a.back()

*(--a. end())

vector, list, deque

a.push_front(t)

a.insert(a.begin(), t)

list, deque

a.push_back(t)

a.insert(a.end(), t)

vector, list, deque

a.pop_front()

a.erase(a.begin())

list, deque

a.pop_back()

a.erase(-- a.end())

vector, list, deque

a[n]

*(a.begin() + n)

vector, deque
Ассоциативные контейнеры:
общие свойства
свойство

пояснение

X::key_type

Тип ключа

X::value_type

Тип значения

X::key_compare

Тип функции сравнения ключей (функтор)

X(i, j), X(i, j, c)

Создание контейнера и заполнение его значениями из [i,
j). c – объект сравнения

a.insert(t)
a.insert(i, j)
a.insert(p, t)

Вставка элемента (полуотрезка)

a.erase(k);
a.erase(q);

Удаление элемента по ключу или итератору.

a.find(k)

Поиск значения по ключу

a.count(k)

Подсчет элементов с ключом, равным к

…

…
Использование контейнеров
Рекомендации:
выбор контейнера
Критерий

Рекомендация

Возможность вставки нового
элемента на произвольную позицию
контейнера

Если нужна, выбирайте
последовательный контейнер;
ассоциативные контейнеры не подходят.

Структура памяти контейнера
должна соответствовать правилам
языка C

Только vector

критична скорость поиска

Рассмотрите сортированные векторы и
ассоциативные контейнеры

Критична скорость доступа

Список не подходит

...

...
Рекомендации:
использование STL










Не пытайтесь писать контейнерно-независимый
код;
Реализуйте быстрое и корректное копирование
объектов в контейнерах;
Старайтесь не использовать итераторы
повторно;
Используйте алгоритмы вместо циклов
Всегда включайте нужные заголовки
Научитесь читать сообщения компилятора

More Related Content

What's hot

5. java lecture io
5. java lecture io5. java lecture io
5. java lecture ioMERA_school
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Dima Dzuba
 
функции в Java script
функции в Java scriptфункции в Java script
функции в Java scriptViktor Andreev
 
Субъекторная модель
Субъекторная модельСубъекторная модель
Субъекторная модельcorehard_by
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Stfalcon Meetups
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksMikhail Kurnosov
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияYandex
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияYandex
 
Характерные черты функциональных языков программирования
Характерные черты функциональных языков программированияХарактерные черты функциональных языков программирования
Характерные черты функциональных языков программированияAlex.Kolonitsky
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторовDEVTYPE
 
Лекция 6
Лекция 6Лекция 6
Лекция 6itc73
 

What's hot (20)

5. java lecture io
5. java lecture io5. java lecture io
5. java lecture io
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
PHP7 - что ожидать?
PHP7 - что ожидать?PHP7 - что ожидать?
PHP7 - что ожидать?
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Подпрограммы
ПодпрограммыПодпрограммы
Подпрограммы
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
Stream API
Stream APIStream API
Stream API
 
Python: ввод и вывод
Python: ввод и выводPython: ввод и вывод
Python: ввод и вывод
 
функции в Java script
функции в Java scriptфункции в Java script
функции в Java script
 
Субъекторная модель
Субъекторная модельСубъекторная модель
Субъекторная модель
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знания
 
Python. Обработка ошибок
Python. Обработка ошибокPython. Обработка ошибок
Python. Обработка ошибок
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знания
 
Характерные черты функциональных языков программирования
Характерные черты функциональных языков программированияХарактерные черты функциональных языков программирования
Характерные черты функциональных языков программирования
 
List - списки
List - списки List - списки
List - списки
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторов
 
Лекция 6
Лекция 6Лекция 6
Лекция 6
 

More from mcroitor

09 server mgmt_ii_ro
09 server mgmt_ii_ro09 server mgmt_ii_ro
09 server mgmt_ii_romcroitor
 
09 server mgmt_ii_ru
09 server mgmt_ii_ru09 server mgmt_ii_ru
09 server mgmt_ii_rumcroitor
 
10 server security_ro
10 server security_ro10 server security_ro
10 server security_romcroitor
 
10 server security_ru
10 server security_ru10 server security_ru
10 server security_rumcroitor
 
08 server mgmt_ro
08 server mgmt_ro08 server mgmt_ro
08 server mgmt_romcroitor
 
08 server mgmt_ru
08 server mgmt_ru08 server mgmt_ru
08 server mgmt_rumcroitor
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_rumcroitor
 
07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_romcroitor
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_romcroitor
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_rumcroitor
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_romcroitor
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_rumcroitor
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_romcroitor
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_rumcroitor
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_romcroitor
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_rumcroitor
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_romcroitor
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_rumcroitor
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_romcroitor
 
01 server definition
01 server definition01 server definition
01 server definitionmcroitor
 

More from mcroitor (20)

09 server mgmt_ii_ro
09 server mgmt_ii_ro09 server mgmt_ii_ro
09 server mgmt_ii_ro
 
09 server mgmt_ii_ru
09 server mgmt_ii_ru09 server mgmt_ii_ru
09 server mgmt_ii_ru
 
10 server security_ro
10 server security_ro10 server security_ro
10 server security_ro
 
10 server security_ru
10 server security_ru10 server security_ru
10 server security_ru
 
08 server mgmt_ro
08 server mgmt_ro08 server mgmt_ro
08 server mgmt_ro
 
08 server mgmt_ru
08 server mgmt_ru08 server mgmt_ru
08 server mgmt_ru
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
 
07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_ro
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_ro
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_ro
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_ro
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_ru
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_ro
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_ro
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_ru
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_ro
 
01 server definition
01 server definition01 server definition
01 server definition
 

контейнеры STL