Содержание
- 2. Темы лекции
- 3. Библиотека стандартных шаблонов (STL) (англ. Standard Template Library) — набор согласованных обобщённых алгоритмов, контейнеров, средств доступа
- 4. Состав STL: контейнеры, итераторы, алгоритмы, аллокаторы, адаптеры. Контейнер – хранилище, единицами хранения (элементами) являются другие объекты
- 5. Состав STL: Последовательный контейнер представляет множество объектов одного типа в строго линейной последовательности. Ассоциативный контейнер обеспечивает
- 8. Шаблоны STL основывается на понятии шаблона. Предположим, что для некоторого числа х > 0 нужно часто
- 9. Шаблонные функции Вместо того чтобы писать две функции: double f(double x) { double x2 = 2
- 10. Шаблонные функции // ftempl.срр: Шаблонная функция. #include using namespace std; template T f (T x) {
- 11. Шаблонные структуры Пусть нам нужна структура Pair, чтобы хранить пары значений. Иногда оба значения принадлежат к
- 12. Шаблонные структуры Вместо этого напишем одну шаблонную структуру: // cltempl.срр: #include template struct Pair { void
- 13. Шаблонные структуры template void Pair ::showQ() { cout } int main() { Pair a(37.0, 5.0); Pair
- 14. Замечания Как пользователи STL мы можем не беспокоиться об определениях, так как шаблонные функции, структуры и
- 16. Идея итераторов: Итератор – аналог указателя. Получив итератор какого-то элемента контейнера при помощи операторов инкремента ++
- 17. Итераторы Какие функции должен выполнять итератор? Возможность разыменования того объекта, на который указывает итератор. Возможность изменить
- 18. Типы Итераторы Input Iterator – получаем доступ только для чтения данных (необходим инкремент). Output Iterator –
- 19. Иерархия итераторов Random Access Iterator Bidirectional Iterator Forward Iterator Input Iterator Output Iterator Trivial Iterator Все
- 20. Итераторы обеспечивают доступ к элементам контейнера. С помощью итераторов очень удобно перебирать элементы. Итератор описывается типом
- 21. Операции с итераторами С итераторами можно проводить следующие операции: *iter: получение элемента, на который указывает итератор
- 23. Алгоритмы Алгориты делятся на несколько категорий: немодифицирующие алгоритмы (не изменяющие порядок следования элементов в контейнере) –
- 24. Аллокаторы Аллокаторы предназначены для выделения и освобождения памяти, – низкоуровневый интерфейс. Если контейнер выделяет память при
- 26. Синтаксис вызова обобщенного алгоритма find where = find(first, last, value); Параметры: • first - итератор, указывающий
- 27. #include #include #include #include // Алгоритм find using namespace std; int main() { cout char s[]
- 28. Понятие итератора является ключевым в STL. Алгоритмы STL написаны с применением итераторов в качестве параметров, а
- 30. Vector (Вектор) .
- 31. Vector — это замена стандартному динамическому массиву, память для которого выделяется вручную, с помощью оператора new.
- 32. Методы Vector: push_back() — добавить последний элемент pop_back() — удалить последний элемент clear() — удалить все
- 33. #include #include #include #include // Алгоритм find using namespace std; int main() { cout vector vectorl
- 34. List .
- 35. Контейнер list представляет двухсвязный список. Для его использования необходимо подключить заголовочный файл list: Создание списка: #include
- 36. Получение элементов В отличие от других контейнеров для типа list не определена операция обращения по индексу
- 37. #include #include int main() { std::list numbers = { 1, 2, 3, 4, 5 }; int
- 38. Размер списка Для получения размера списка можно использовать функцию size(): Функция empty() позволяет узнать, пуст ли
- 39. std::list numbers = { 1, 2, 3, 4, 5, 6 }; numbers.resize(4); // оставляем первые четыре
- 40. Изменение элементов списка Функция assign() позволяет заменить все элементы списка определенным набором. Она имеет следующие формы:
- 41. Функция swap() обменивает значениями два списка: std::list list1 = { 1, 2, 3, 4, 5 };
- 42. Добавление элементов Для добавления элементов в контейнер list применяется ряд функций. push_back(val): добавляет значение val в
- 43. Функции push_back(), push_front(), emplace_back() и emplace_front(): Добавление в середину списка с помощью функции emplace(): std::list numbers
- 44. Добавление в середину списка с помощью функции insert(): std::list numbers1 = { 1, 2, 3, 4,
- 45. Удаление элементов Для удаления элементов из контейнера list могут применяться следующие функции: clear(p): удаляет все элементы
- 46. #include #include #include #include using namespace std; int main() { cout list listl = make >("C++
- 47. #include #include #include #include using namespace std; int main() { cout deque dequel = make >("C++
- 48. Map .
- 49. Что такое map Это ассоциативный контейнер, который работает по принципу — [ключ — значение]. Он схож
- 50. Как создать map Сперва понадобится подключить соответствующую библиотеку: Чтобы создать map нужно воспользоваться данной конструкцией: —
- 51. Множества и словари map (multimap) – ассоциативный контейнер, который отсортированные список пар в соответствии с уникальным
- 52. Итераторы для map .
- 53. Итераторы для map Использование итераторов одна из главных тем, если вам понадобится оперировать с этим контейнером.
- 54. #include #include using namespace std; int main() { setlocale(0, ""); map mp; cout > n; for
- 55. Методы map insert Это функция вставки нового элемента. num_1 — ключ. num_2 — значение. Мы можем
- 56. find У этой функции основная цель узнать, есть ли определенный ключ в контейнере. - Если он
- 57. erase Иногда приходится удалять элементы. Для этого у нас есть функция — erase(). Давайте посмотрим как
- 58. Множества и словари set (multiset) – ассоциативный контейнер, который содержит элементы, отсортированные в соответствии с уникальным
- 60. Обобщенный алгоритм merge. Алгоритм merge используется для объединения двух отсортированных последовательностей в единую (отсортированную) последовательность. Параметры
- 61. #include using namespace std; int main() { cout char s[] = "aeiou"; int len = strlen(s);
- 62. #include using namespace std; int main() { cout char s[] = "acegikm"; deque deque1 = make
- 64. Алгоритмы стандартной библиотеки Немодифицирующие операции над последовательностями: all_of any_of none_of // Проверяют, является ли предикат верным
- 65. adjacent_find // Ищет в диапазоне два одинаковых смежных элемента mismatch // Находит первую позицию, в которой
- 66. Модифицирующие операции над последовательностями: copy copy_if // Копирует ряд элементов copy_n // Копирует ряд элементов в
- 67. replace replace_if // заменяет все значения, удовлетворяющие определенным // критериям с другим значением swap // обмен
- 68. Операции разделения: is_partitioned // определяет, разделен ли диапазон данным предикатом partition // делит диапазон элементов на
- 69. Операции, относящиеся к упорядочиванию: is_sorted // проверяет, является ли диапазон отсортированным в порядке // возрастания is_sorted_until
- 70. Операции двоичного поиска (на отсортированных диапазонах) : lower_bound // находит первый элемент диапазона больший чем заданное
- 71. Операции над множествами (на отсортированных диапазонах) : merge // слияние двух отсортированных диапазонов inplace_merge // слияние
- 72. Операции над пирамидой (кучей) : is_heap // проверяет является ли данный диапазон пирамидой is_heap_until // находит
- 73. Этот заголовочный файл содержит набор алгоритмов для выполнения определенных операций над последовательностями числовых значений. Благодаря своей
- 74. Операции минимума/максимума: max // Возвращает наибольший из двух аргументов max_element // Возвращает наибольший элемент в диапазоне
- 75. Алгоритмы из библиотеки C : qsort // Сортирует диапазон элементов любого типа bsearch // Ищет в
- 77. Предикат. Функция-предикат и функтор Предикат, это нечто функциональное, возвращающее тип bool. Есть две возможности организации такой
- 78. bool f (const int& x,const int& y){ return x // создаем синоним типа - указатель на
- 79. Функтор Есть большое множество вариантов их практического применения: - Необходим вызов обычной функции или функции-члена класса.
- 80. any_of template bool any_of (InputIterator first, InputIterator last, UnaryPredicate pred); Проверяет, соответствует ли какой-либо элемент в
- 81. #include // std::cout #include // std::any_of #include // std::array int main () { std::array foo =
- 83. #include #include // Алгоритм accumulate using namespace std; int main() { cout int х[5] = {2,
- 84. Рассмотрим, как функция accumulate использует итераторы. template T accumulate(InputIterator first, Inputlterator last, T init) { while(first
- 85. Функциональные объекты Из определения шаблона accumulate в предыдущем примере видно, что для элементов контейнера задан оператор
- 86. Пример. Использование accumulate для расчета произведения элементов #include #include #include #include using namespace std; int mult(int
- 87. Пример. Расчет произведения с применением функционального объекта class multiply { public: int operator()(int x, int y)
- 88. Пример использования словаря Создаём структуру TicketInfo, который будет содержать все необходимые поля для заявки, а также
- 89. Описание класса struct TicketInfo { long ticket_id; // идентификатор билета long n_reis; // номер рейса string
- 90. int add_ticket() int add_ticket() { setlocale(LC_ALL,"Russian"); long reis_n, id_ticket; char ch[30]; string str; TicketInfo tickets; multimap
- 92. Скачать презентацию