Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП - 2 часть - Лекция 4. STL.docx
Скачиваний:
12
Добавлен:
11.05.2015
Размер:
134.67 Кб
Скачать

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();

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]