Различия
Показаны различия между двумя версиями страницы.
— | stl [2021/07/31 21:58] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Шаблоны STL ====== | ||
+ | |||
+ | {{htmlmetatags> | ||
+ | metatag-description=(STL: | ||
+ | }} | ||
+ | |||
+ | **STL** (англ. Standard Template Library -Стандартная библиотека шаблонов). Стандартная библиотека шаблонов до включения в стандарт [[zametki_po_jazyku_c|C++]] была сторонней разработкой, | ||
+ | |||
+ | Библиотека STL содержит набор классов и функций, | ||
+ | |||
+ | Для того чтобы разобраться с библиотекой STL, нам необходимо познакомиться с основными понятиями, | ||
+ | |||
+ | * **Контейнер** (container) - Основа библиотеки STL. Контейнер служат для хранения данных, | ||
+ | * **Алгоритм** (algorithm) - специальная функция для работы с данными, | ||
+ | * **Итератор** (iterator) - специальный указатель, | ||
+ | * **Функторы** (functor) - Функтор передается алгоритмам для дальнейшего использования. [[reshenie_zadachi_14|При помощи функтора заполнить вектор числами Фибоначчи]]. Функторы (иначе говоря, | ||
+ | <note tip> | ||
+ | |||
+ | * **Аллокатор** - распределитель памяти. Такой распределитель памяти имеется у каждого конкретного контейнера. Данная конструкция просто-напросто управляет процессом выделения памяти для контейнера. Следует отметить, | ||
+ | * **Предикат** - функция нестандартного типа, используемая в контейнере. Предикат бывает унарный и бинарный. Может возвращать логическое значение (истину либо ложь). Часто используется при сортировке. | ||
+ | ===== Справочники по STL ===== | ||
+ | Официальный справочники по STL в Linux <file bash> | ||
+ | # apt install stl-manual | ||
+ | $ firefox file:/// | ||
+ | </ | ||
+ | |||
+ | ====== Контейнеры ====== | ||
+ | * STL: [[Класс auto_ptr]] (automatic pointer - автоматический указатель) | ||
+ | * STL: [[Класс string]] | ||
+ | * Класс vector - заменяет динамический массив. | ||
+ | * Класс list - рассчитан на поиск. К данным нельзя обратиться через [], только через итератор. | ||
+ | * [[Класс map]] - быстрый поиск значений по ключу. Map будет игнорировать вставку если пара уже существует. Поддерживает ассоциативный контейнер (т.е. ключ может быть строкой) | ||
+ | * Класс multimap - поддерживает повторяющиеся ключи в отличии от map | ||
+ | ====== Алгоритмы ====== | ||
+ | В библиотеке STL существуют функции, | ||
+ | |||
+ | Следует отметить, | ||
+ | |||
+ | |||
+ | Все алгоритмы делятся на две группы: | ||
+ | |||
+ | Если алгоритм возвращает итератор, | ||
+ | |||
+ | Алгоритмы определены в заголовочном файле < | ||
+ | * Немодифицирующие операции. | ||
+ | for_earch() - выполняет операции для каждого элемента последовательности | ||
+ | find() - находит первое вхождение значения в последовательность | ||
+ | find_if() - находит первое соответствие предикату в последовательности | ||
+ | count() - подсчитывает количество вхождений значения в последовательность | ||
+ | count_if() - подсчитывает количество выполнений предиката в последовательности | ||
+ | search() - находит первое вхождение последовательности как подпоследовательности | ||
+ | search_n()- находит в последовательности подпоследовательность, | ||
+ | * Модифицирующие операции. | ||
+ | copy() - копирует последовательность, | ||
+ | swap() - меняет местами два элемента | ||
+ | replace() - заменяет элементы с указанным значением | ||
+ | replace_if() - заменяет элементы при выполнении предиката | ||
+ | replace_copy() - копирует последовательность, | ||
+ | replace_copy_if() - копирует последовательность, | ||
+ | fill() - заменяет все элементы данным значением | ||
+ | remove() - удаляет элементы с данным значением | ||
+ | remove_if() - удаляет элементы при выполнении предиката | ||
+ | remove_copy() - копирует последовательность, | ||
+ | remove_copy_if() - копирует последовательность, | ||
+ | reverse() - меняет порядок следования элементов на обратный | ||
+ | random_shuffle() - перемещает элементы согласно случайному равномерному распределению (" | ||
+ | transform() - выполняет заданную операцию над каждым элементом последовательности | ||
+ | unique() - удаляет равные соседние элементы | ||
+ | unique_copy() - копирует последовательность, | ||
+ | * Сортировка. | ||
+ | sort() - сортирует последовательность с хорошей средней эффективностью | ||
+ | partial_sort() - сортирует часть последовательности | ||
+ | stable_sort() - сортирует последовательность, | ||
+ | lower_bound() - находит первый элемент, | ||
+ | upper_bound() - находит первый элемент, | ||
+ | binary_search() - определяет, | ||
+ | merge() - сливает две отсортированные последовательности | ||
+ | * Работа с множествами. | ||
+ | includes() - проверка на вхождение | ||
+ | set_union() - объединение множеств | ||
+ | set_intersection() - пересечение множеств | ||
+ | set_difference() - разность множеств | ||
+ | * Минимумы и максимумы. | ||
+ | min() - меньшее из двух | ||
+ | max() - большее из двух | ||
+ | min_element() - наименьшее значение в последовательности | ||
+ | max_element() - наибольшее значение в последовательности | ||
+ | Перестановки. | ||
+ | next_permutation() - следующая перестановка в лексикографическом порядке | ||
+ | prev_permutation() - предыдущая перестановка в лексикографическом порядке | ||
+ | ====== Предикаты ====== | ||
+ | Зачастую, | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Наверное, | ||
+ | |||
+ | Используем следующий порядок действий: | ||
+ | - Четность определяется получением остатка от деления на 2. | ||
+ | - Затем, заполняется контейнер-список значениями от 1 до 10. (для этого вызывается метод push_back(), | ||
+ | - Затем значения выводятся на экран. | ||
+ | - Далее осуществляется поиск и выделение всех четных значений. | ||
+ | < | ||
+ | |||
+ | <file cpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | // предикат | ||
+ | bool isEven(int num) | ||
+ | { | ||
+ | return bool(num % 2); | ||
+ | } | ||
+ | |||
+ | void main() | ||
+ | { | ||
+ | list< | ||
+ | list< | ||
+ | |||
+ | for(int i=1; i<=10; i++) | ||
+ | l.push_back(i); | ||
+ | |||
+ | copy(l.begin(), | ||
+ | cout<<" | ||
+ | t=remove_if(l.begin(), | ||
+ | copy(l.begin(), | ||
+ | } | ||
+ | </ | ||
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга