- •Определение класса
- •Пример (точка)
- •Оператор вывода (пример)
- •Параметр шаблона по умолчанию (пример)
- •Где перехватывать исключения?
- •Гарантии безопасности исключений
- •Базовые операции
- •Виртуальная функция
- •Использование virtual
- •Массив, как диапазон
- •Контейнер
- •Свойства элемента контейнера
- •Заголовочные файлы
- •Доступ к элементам list
- •Размеры list
- •Доступ к элементам map
- •Очередь с приоритетом
- •Дэк (двусвязная очередь)
- •Матрица (в математике)
- •Атд “матрица”
- •Дерево (доп. Определения)
- •Узел дерева (доп. Определения)
- •“Родственные отношения”
- •“Родственные отношения” (иллюстрация)
- •Баланс в дереве (иллюстрация)
- •Std::less (пример функтора)
- •Std::find_if (пример алгоритма)
- •Функциональные адаптеры
- •Производящая функция
- •Производящие функции для функциональных адаптеров
Заголовочные файлы
совпадают с именем контейнера
<vector>
<list>
<deque>
<set> - в т.ч. multiset
<map> - в т.ч. multimap
вспомогательные
<utility>
<iterator>
14.04.2012 cppNewb.ru 42
vector<>
динамический массив
произвольный доступ
быстрая вставка/удаление в конец
медленная вставка/удаление в начало
изменение числа элементов делает итераторы невалидными
14.04.2012 cppNewb.ru 43
Объявление vector
template
<class T,
class Allocator = allocator<T> > class vector
vector<bool> - специализация
14.04.2012 cppNewb.ru 44
Доступ к элементам vector
через итератор
обобщенный вариант
по индексу
замена встроенным массивам
с концов
последовательное расположение в памяти
14.04.2012 cppNewb.ru 45
Доступ к элементам vector
через итератор
iterator begin()
начало интервала
iterator end()
конец интервала
reverse_iterator rbegin()
reverse_iterator rend()
14.04.2012 cppNewb.ru 46
Доступ к элементам vector (если контейнер const)
const_iterator begin () const const_iterator end () const
14.04.2012 cppNewb.ru 47
Заполнение массива
template<class InpI> void
assign(InpI fst, InpI lst)
скопировать диапазон
void
assign(size_type n, const T& u)
заполнить значениями u
14.04.2012 cppNewb.ru 48
Очистка массива
iterator erase(iterator pos)
удалить элемент
iterator
erase(iterator fst, iterator lst)
удалить элемент или интервал
14.04.2012 cppNewb.ru 49
list<>
двусвязный список
линейный доступ
быстрая вставка и удаление в любой позиции
итераторы валидны при вставке и удалении
кроме удаления текущего элемента
14.04.2012 cppNewb.ru 50
Объявление list<>
template
<class T,
class Allocator = allocator<T> > class list
14.04.2012 cppNewb.ru 51
Доступ к элементам list
через итератор
обобщенный вариант
с концов
элементы произвольное расположены в
памяти
14.04.2012 cppNewb.ru 52
size
Размеры list
число элементов
empty
проверка на пустоту
max_size
максимальное число элементов (системно)
resize
изменить число элементов
14.04.2012 cppNewb.ru 53
deque<>
блочно-списочная структура
произвольный доступ
быстрая вставка/удаление в конец
быстрая вставка/удаление в начало
изменение числа элементов делает итераторы невалидными
14.04.2012 cppNewb.ru 54
pair<>
хранение пары значений,
м.б. разного типа
сравнение пар
14.04.2012 cppNewb.ru 55
Определение pair<>
template<class T1, class T2> struct pair
{
-
typedef
T1
first_type;
typedef
T2
second_type;
T1 first; T2 second;
pair() : first(T1()), second(T2()) {} pair(const T1& x, const T2& y)
: first(x), second(y) {}
template <class U, class V> pair(const pair<U, V>&p)
: first(p.first), second(p.second) { }
};
14.04.2012 cppNewb.ru 56
<utility>
Сравнение pair<>
определены операторы сравнения
==, <, !=, >, >= и <=
(lhs == rhs)
означает
(lhs.first == rhs.first) && (lhs.second == rhs.second)
в сравнении на неравенство (<, >)
сравнивается first
если равны, то сравниваются second
14.04.2012 cppNewb.ru 57
map<>
бинарное дерево поиска
отображение key→value
итераторы валидны при вставке и удалении
кроме удаления текущего элемента
14.04.2012 cppNewb.ru 58
Объявление map<>
template<class Key, class T,
-
class
Compare =
less<Key>,
class
Allocator
=
allocator<pair<const Key,T> > >
class map
14.04.2012 cppNewb.ru 59