Контейнеры STL Библиотека algorithm Фичи C++11 1. Контейнеры
Контейнеры STL Библиотека algorithm Фичи C++11
1. Контейнеры
std::pair Представляет собой пару значений произвольных типов Создается как pair
std::vector Представляет собой массив переменного размера Реализует произвольный доступ и последовательное итерирование Может расти (теоретически) неограниченно
Полезные методы std::vector front() - досуп к первому элементу back() - доступ к последнему элементу push_back(T value) - вставка в конец empty() - проверка на пустоту size() - возвращает размер insert(iterator pos, T value) — вставка в указанную позицию erase(iterator first [, iterator last]) — удаление одного (или набора) элементов clear() - очистка всего контейнера
std::string Строка символов динамического размера Можно работать как с char[]-строками Можно использовать в функциях, ожидающих char
Полезные методы std::string empty() size(), length() append(), operator+= replace() substr(pos, count) find(string s)
std::set Неповторяющееся отсортированное множество элементов
Полезные методы std::set empty() size() insert(key) erase(iterator pos[, iterator last]) find(key) lower_bound(key) upper_bound(key)
std::map Хеш, он же ассоциативный массив, он же словарь Хранит пары вида «ключ — значение» Сортирует по ключу Ключи уникальны Можно обращаться по ключу, используя [ ] Существует также unordered_map
Полезные методы std::map empty() size() find(key) lower_bound(key) upper_bound(key) insert(pair)
2. Библиотека algorithm
Итераторы Объект, предоставляющий возможность проходить (итерировать) по элементам набора (контейнера) Итератор для вектора int'ов будет выглядеть так: vector
std::sort Принимает аргументы: итератор начала коллекции, итератор конца (здесь и далее «конец» - следующий за последним элемент, итератор end), [функцию-компаратор] Сортирует содержимое контейнера алгоритмом quick sort (за O(n * log n)) Для элементов должна быть определена операция сравнения или функция-компаратор
Компараторы Функция, принимающая два аргумента одного типа, и возвращающая bool Возвращает true, если элементы стоят в правильном порядке, и flase — если их нужно переставить местами Передается третьим параметром (необязательно) в функцию сортировки
std::reverse(begin, end) — переворачивает последовательность std::unique(begin, end) — удаляет все повторения элеменов последовательности std::count(begin, end, value) — возвращет количество вхождений элемента value в последовательность std::find(begin, end, value) — находит указанный элемент в последовательности. Рабоает за O(n)
Функции бинарного поиска Работают с отсортированными последовательностями за O(log n) binary_search(begin, end, value) — возвращает bool, проверяет наличие элемента в последовательности lower_bound(begin, end, value) — возвращает итератор на первый элемент >= value upper_bound(begin, end, value) — возвращает итератор на первый элемент > value equal_range(begin, end, value) — возвращает пару итераторов, обозначающих границы подпоследовательности искомых значений
3. С++11
Тип auto Упрощает работу с длинными названиями типов С++03: vector
Range-based циклы Для итерации по наборам данных можно использовать новый синтаксис цикла for: vector
Источники и мануалы по API C++ http://www.cplusplus.com/reference/ http://ru.cppreference.com
Асимптотика и О-нотация Время работы программы зависит от входящих параметров и используемых алгоритмов. По крайней мере, у нас. Вычислительная сложность записывается как функция от ключевых параметров Цикл по n элементов будет работать O(n) времени Цикл по матрице m*n — О(n*m) Вычисление суммы арифметической прогрессии всегда работает одинаковое время — O(1) — константная асимптотика Допустимая сложность наших задач — около 10^7, предельная — около 10^9, но не всегда
7710-acm_stl_lecture.ppt
- Количество слайдов: 23