Stl язык программирования расшифровка

Библиотека стандартных шаблонов STL (Standard Template Library). Общие понятия. Контейнеры. Алгоритмы. Итераторы. Функторы

Данная тема является началом изучения библиотеки STL языка C++.

Поиск на других ресурсах:

1. Библиотека STL. Общие сведения

В языке C ++ был разработан мощный набор инструментов для создания разнообразных программ — библиотека стандартных шаблонов (Standard Template Library, STL). Эта библиотека, фактически, является неотъемлемой составляющей языка C++, что является большим достижением ее разработчиков. Библиотека STL включена в стандарт языка C++ и содержит универсальные шаблонные классы и функции, которые реализуют широкий спектр алгоритмов и структур данных. Эти средства программирования можно применять практически к любым типам данных.

Различают следующие основные составляющие (компоненты) библиотеки STL:

  • контейнеры (container)
  • алгоритмы (algorithm)
  • итераторы (iterator)
  • функциональные объекты или функторы (functor).

Использование и сочетание этих составляющих позволяет программировать решения очень широкого круга задач программирования.

2. Контейнеры. Общие сведения. Перечень

В программировании контейнер — это объект, который сохраняет другие объекты внутри себя. Объекты, хранящиеся в контейнерах, могут быть как базовых (примитивных) типов так и экземплярами классов с соответствующим необходимым функционалом.

В библиотеке STL реализованы следующие контейнеры:

  • bitset — набор битов;
  • deque — двухсторонняя очередь;
  • list — линейный список;
  • map — ассоциативный контейнер, построенный по принципу key : value , в котором каждому ключу key соответствует значение value ;
  • multimap — ассоциативный контейнер, в котором одному значению ( key ) соответствует несколько значений ( value1 , value2 , …, valueN );
  • multiset — множество, в котором один и тот же элемент может встречаться несколько раз;
  • priority_queue — очередь с приоритетами;
  • queue — очередь;
  • set — множество, в котором каждый элемент встречается только один раз;
  • stack — стек;
  • vector — динамический массив.
Читайте также:  Объектно ориентированное программирование java eclipse
3. Алгоритмы. Общие сведения

Содержимое контейнеров обрабатывается с помощью алгоритмов. Алгоритмы позволяют обрабатывать контейнеры на любой вкус: инициализировать, сортировать содержимое контейнеров, преобразовывать, реализовывать различные виды поиска и тому подобное.

Для доступа к алгоритмам, нужно подключить соответствующую библиотеку

Все алгоритмы являются шаблонными функциями. Они могут быть применены к любому типу контейнера. Ниже приведен перечень алгоритмов библиотеки STL:

  • adjacent_find — осуществляет поиск пары соседних элементов, которые совпадают между собой;
  • binary_search — выполняет бинарный поиск в упорядоченной последовательности;
  • copy — копирует одну последовательность в другую;
  • copy_backward — делает то же, что и copy , только результирующая последовательность записывается в обратном порядке;
  • count — подсчитывает количество вхождений заданного элемента в последовательности;
  • count_if — вычисляет количество вхождений элемента в последовательности, соответствующей заданному условию;
  • equal — определяет, совпадают ли элементы двух диапазонов;
  • equal_range — возвращает диапазон, который допускает вставку элементов без нарушения порядка;
  • fill , fill_n — заполняют диапазон нужными значениями;
  • find — осуществляет поиск элемента в заданной последовательности, возвращает позицию (итератор) первого вхождения элемента в последовательности;
  • find_end — осуществляет поиск последнего вхождения подпоследовательности, содержащийся в заданном диапазоне;
  • find_first_of — выполняет поиск первого элемента подпоследовательности, который совпадает с любым элементом другой подпоследовательности;
  • find_if — находит первый элемент последовательности, который совпадает с элементом с другой последовательности;
  • for_each — применяет указанную функцию к заданному диапазону элементов;
  • generate , generate_n — присваивают элементам диапазона значения, возвращаемые функцией-генератором;
  • include — определяет, содержит ли одна последовательность другую;
  • inplace_merge — объединяет два диапазона;
  • iter_swap — осуществляет обмен местами двух значений, на которые указывают аргументы;
  • lexicographical_compare — осуществляет лексикографическое сравнение двух последовательностей;
  • lower_bound — определяет первый элемент последовательности, который не меньше заданного значения;
  • make_heap — на основе заданной последовательности создает «кучу»;
  • max — возвращает максимум из двух значений;
  • max_element — возвращает позицию (итератор), которая установлена на максимальный элемент последовательности;
  • merge — объединяет две упорядоченные последовательности. Результат записывается в третью последовательность;
  • min — из двух значений возвращает минимальное;
  • min_element — возвращает позицию (итератор), которая установлена ​​на минимальный элемент последовательности;
  • mismatch — для двух заданных последовательностей находит первое несовпадение;
  • next_permutation — формирует следующую перестановку элементов последовательности;
  • nth_element — упорядочивает последовательность таким образом, что все элементы, которые меньше заданного элемента, размещаются перед этим элементом в последовательности;
  • partial_sort — выполняет сортировку элементов в заданном диапазоне;
  • partial_sort_copy — упорядочивает элементы последовательности в заданном диапазоне, затем копирует в результирующую последовательность отсортированные элементы;
  • partition — упорядочивает последовательность так, чтобы все элементы, которые соответствуют заданному условию, размещались перед всеми другими элементами этой последовательности;
  • pop_heap — меняет местами первый и предпоследний элементы и перестраивает «кучу»;
  • prev_permutation — воспроизводит предыдущую перестановку, состоящую из элементов последовательности;
  • push_heap — заталкивает элемент в конец кучи;
  • random_shuffle — меняет последовательность в заданном диапазоне;
  • remove — удаляет из указанной последовательности элементы, которые имеют определенное значение;
  • remove_if — удаляет из указанной последовательности элементы по заданному предикату;
  • remove_copy — копирует из указанной последовательности элементы, имеющие определенное значение, в заданную последовательность;
  • remove_copy_if — копирует из указанной последовательности элементы в другую область на основе заданного предиката;
  • replace — заменяет элементы заданного диапазона из одного значения на другое;
  • replace_if — заменяет элементы заданного диапазона на основе предиката;
  • replace_copy_if — копирует элементы заданной последовательности в другую область с заменой одного значения на другое;
  • replace_copy — копирует элементы заданного диапазона в другую последовательность, заменяя элементы на основе заданного предиката другим значением;
  • reverse — изменяет порядок элементов последовательности на противоположный в пределах заданного диапазона;
  • reverse_copy — изменяет порядок элементов в последовательности на противоположный и результат записывает в другую последовательность;
  • rotate — выполняет циклический сдвиг влево элементов последовательности в заданных пределах;
  • rotate_copy — выполняет циклический сдвиг влево элементов последовательности, результат помещает в другую последовательность;
  • search — выполняет поиск подпоследовательности в последовательности;
  • search_n — находит n-е вхождение заданного элемента в последовательности;
  • set_difference — для двух заданных последовательностей создает последовательность, содержащую несовпадающие элементы (разность множеств);
  • set_intersection — для двух заданных последовательностей создает последовательность, содержащую совпадающие элементы (пересечение множеств);
  • set_symmetric_difference — создает последовательность, которая является симметричной разности двух последовательностей;
  • set_union — создает последовательность, которая является объединением двух последовательностей;
  • sort — упорядочивает последовательность в заданном диапазоне;
  • sort_heap — упорядочивает «кучу» внутри заданного диапазона;
  • stable_partition — упорядочивает последовательность в заданных пределах таким образом, чтобы все элементы, которые удовлетворяют заданному условию, предшествовали всем другим элементам. Разбивка последовательности фиксируется;
  • stable_sort — упорядочивает последовательность в заданных пределах таким образом, что равные элементы не меняют свои места;
  • swap — меняет местами значения, заданные ссылками;
  • swap_ranges — меняет местами элементы заданного диапазона;
  • transform — для заданной последовательности выполняет функцию к каждому элементу этой последовательности. Результат сохраняется в новой последовательности;
  • unique — вытягивает дубликаты из указанной последовательности;
  • unique_copy — делает копию из последовательности извлекая из нее дубликаты (одинаковые элементы):
  • upper_bound — находит последний элемент последовательности, не превышающий заданное значение.
4. Итераторы. Общие сведения

Итераторы — это объекты, которые позволяют перемещаться по содержимому контейнера. Итераторы подобны указателям. Итераторы являются абстракцией указателя. С помощью итераторов можно считывать и изменять значения элементов контейнера.

Чтобы использовать итераторы нужно подключить заголовок iterator

В C++ различают 5 видов итераторов:

  • RandIter — итератор произвольного доступа — записывает и извлекает значение из контейнера. Обеспечивает произвольный доступ к элементам контейнера;
  • BiIter — двунаправленный итератор — записывает и извлекает значения. Перемещается вперед и назад;
  • ForIter — прямой итератор — перемещается только вперед. Записывает и извлекает значения;
  • InIter — итератор ввода — только извлекает значения. Перемещается только вперед;
  • OutIter — итератор вывода — только записывает значения. Перемещается только вперед.

В библиотеке определены следующие классы, реализующие итераторы:

  • iterator — базовый класс для всех итераторов;
  • iterator_traits — представляет различные типы, определенные итератором;
  • insert_iterator — обеспечивает работу итераторов вывода, которые вставляют объекты в контейнеры;
  • back_insert_iterator — обеспечивает работу итераторов вывода, которые вставляют объекты в конец контейнера;
  • front_insert_iterator — обеспечивает работу итераторов вывода, которые вставляют объекты на начало контейнера;
  • reverse_iterator — поддерживает работу обратных итераторов;
  • istream_iterator — поддерживает работу потоковых итераторов ввода;
  • istreambuf_iterator — поддерживает работу потоковых итераторов ввода символов;
  • ostream_iterator — поддерживает работу потоковых итераторов вывода;
  • ostreambuf_iterator — поддерживает работу потоковых итераторов вывода символов.
5. Функторы. Общие сведения

Для обеспечения гибкого взаимодействия между итераторами, контейнерами и алгоритмами, используются функторы. Функтор — это класс, в котором реализована операторная функция operator() . Благодаря функторам объект класса представляется как функция.

Чтобы использовать функторы в программе, нужно подключить заголовок functional

В библиотеке STL функторы делятся на две категории:

Библиотека STL содержит следующие бинарные функторы:

  • plus — суммирует ( + ) два аргумента;
  • minus — вычитает ( ) аргументы;
  • multplies — умножает ( * ) два аргумента;
  • divides — делит ( / ) аргументы;
  • modulus — возвращает результат операции % для двух аргументов;
  • equal_to — сравнивает два аргументы на равенство ( == );
  • not_equal_to — сравнивает два аргументы на неравенство ( != );
  • greater — определяет, больше ли первый аргумент чем второй аргумент ( > );
  • greater_equal — определяет, первый аргумент есть больше или равен второму аргументу ( >= );
  • less — определяет, меньше ли первый аргумент чем второй аргумент ( );
  • less_equal — определяет, первый аргумент меньше или равен второму аргументу ( );
  • logical_and — применяет к аргументам логическое «И» (AND);
  • logical_or — применяет к двум аргументам логическое «ИЛИ» (OR).

Также определены два унарных функтора:

  • logical_not — применяет к аргументу логическое «НЕТ» (NOT);
  • negate — изменяет знак своего аргумента на противоположный.

Связанные темы

Источник

Оцените статью