- •2 Часть
- •Источники информации
- •1.2 Введение вStl
- •1.2.1 Обзор библиотеки
- •1.2.2 Базовые понятия
- •2 Контейнеры
- •2.1 Простые контейнеры
- •2.1.1 Пара (Pair/Tuple)
- •2.2 Контейнеры с последовательным доступом
- •2.2.1 Вектор (vector)
- •2.2.2 Список (list)
- •2.2.3Forward_list
- •2.2.4 Очередь двухсторонняя (deque)
- •2.3 Контейнеры-адаптеры
- •2.3.1 Очередь односторонняя (queue)
- •2.3.2 Очередь с приоритетами (priority queue)
- •2.3.3 Стек (stack)
- •2.4 Контейнеры с доступом к случайным элементам
- •2.4.1 Упорядоченное множество элементов (set)
- •2.4.2Multiset
- •2.4.3 Словарь (map)
- •2.4.4Multimap
- •3 Итераторы
- •4 Алгоритмы
- •4.1 Не модифицируют коллекцию
- •4.1.1 All_of / any_of / none_of
- •4.1.2For_each
- •4.1.3 Find / find_if / find_if_not / find_end / find_first_of
- •4.1.4Count/count_if
- •4.2.2Move/move_backward
- •4.4.2Partial_sort/partial_sort_copy
- •6 БудущееStl
- •7 Наследование и работа с памятью вStl
4.4.2Partial_sort/partial_sort_copy
Частичная сортировка: до какого-то элемента все элементы отсортированы, а потом-нет.
4.4.3is_sorted/is_sorted_until
Проверка, что все отсортировано.
4.5 Бинарный поиск
4.5.1lower_bound/upper_bound
Ищет первую встречную нижнюю/верхнюю границу в отсортированном диапазоне: ниже значения или по функтору.
4.5.2equal_range
Ищет начало первого диапазона одинаковых значений равных заданному значению.
4.5.3binary_search
Проверяет, есть ли значение в отсортированной коллекции.
4.6 Слияние (работает над отсортированными коллекциями только)
4.6.1merge
Делает слияние двух коллекций в третью отсортированную.
4.6.2includes
Проверяет, что одна коллекция входит в состав другой.
4.6.3 set_union / set_intersection / set_difference / set_symetric_difference
Операции над множествами.
4.7 Управление кучей (не используются, рассматривать нет смысла)
Эти подпрограммы используются для работы с очередью с приоритетами. Они используются редко, поэтому рассматривать их нет смысла.
4.7.1push_heap/pop_heap/make_heap
4.7.2 sort_heap
4.7.3 is_heap / is_heap_until
4.8min/max
4.8.1min/max/minmax
Возвращает минимальный, максимальный, минимальный и максимальный элементы.
4.8.2 min_element / max_element / minmax_element
Тоже самое, но в диапазоне элементов.
5 Функторы, лямбда-выражения
Мы рассмотрели, что можно использовать указатели на подпрограммы, структуры, анонимные функторы. Также мы разобрали зачем что использовать в жизни.
Давайте более пристально рассмотрим как можно передавать параметры в функторы. Поскольку анонимные лямбда-выражения превращаются в подпрограммы, мы не можем изнутри выражения обращаться с переменным, которые доступны внутри метода.
vector<Person> persons = {
Person("Ahmed"),
Person("Anna")};
sort(persons.begin(), persons.end(), [](const Person& a, const Person& b) { return a.Name > b.Name; });
изнутри {} мы не может достучаться до persons.
Как сделать так, чтобы достучаться можно было? В квадратных скобках можно указать их.
[&persons] – сделать доступным по ссылкеpersons.
[persons] – сделать доступным по копииpersons.
[&] – сделать доступным по ссылке все локальные переменные.
[=] – сделать доступным по копии все локальные переменные.
[this] - разрешить кthisобращаться текущего класса.
Очевидно, что если они используются, то лямбда выражение, скорее всего, будет во время компиляции преобразовано в структуру с конструктором.
Пример:
sort(persons.begin(), persons.end(), [&persons](const Person& a, const Person& b) { return a.Name > b.Name; });
6 БудущееStl
Qt,Boost,XLib, особенноBoost, это флагманы дальнейшего развитияSTL. Все новые идеи языка С++ поначалу обкатываются вBoost. Если они становятся популярными, то их со временем включают в новый стандарт С++.
Если вы свяжете профессиональную деятельность с С++, то вам нужно будет познакомится с функционалом этих библиотек поверхностно, чтобы при необходимости найти в интернете как сделать нужный функционал.
В других языках, таких как Java, .Netшаблоны получили дальнейшее развитие: их использование стало много проще и комфортнее, эти шаги нельзя было бы сделать без долгого пути развития, которые прошел язык С++.
Одна из идей, упростить интерфейс итераторов, обрезать его функционал до ДайЭлемент, ПерейдиКСледующему.
Работа с коллекциями была упрощена через введение общих базовых классов у всех коллекции: алгоритмы работают с базовым классом, а на самом деле им передается его конкретная реализация.
SQLсинтаксис используется для того, чтобы упростить работу с коллекциями. Его возможностей меньше по сравнению сSTL, однако их хватает для всех задач. Пример:
items
.Where(element=>element> 3)
.Order()
.ToList();