STL в c ++: все, что вам нужно знать



Эта статья предоставит вам подробные и всесторонние знания STL в C ++, а также даст вам представление о различных контейнерах.

Стандартная библиотека шаблонов (STL) - это набор классов шаблонов C ++ для предоставления общих структур данных и функций программирования, таких как списки, стеки, массивы и т. Д. В этой статье о STL в C ++ мы обсудим следующие указатели:

Продолжаем статью о STL в C ++





C ++ шаблоны

C ++ предоставляет нам возможность шаблонов, которая позволяет функциям и классам работать с универсальными типами. Это позволяет повторно использовать функцию или класс и работать с множеством различных типов данных, не перезаписывая каждый из них.

Продолжаем статью о STL в C ++



Общие функции и STL

При программировании часто возникает необходимость в создании функций, которые выполняют одни и те же операции, но работают с разными типами данных. Таким образом, чтобы преодолеть эту проблему, C ++ предоставляет возможность создания одной универсальной функции вместо множества функций, которые могут работать с разными типами данных с помощью параметра шаблона. Коллекция этих общих классов и функций называется стандартной библиотекой шаблонов (STL).

Компоненты STL, которые теперь являются частью стандартной библиотеки C ++, определены в пространстве имен std. Следовательно, мы должны использовать директиву using namespace, чтобы импортировать их в нашу программу.

Синтаксис:



Использование пространства имен std

STL состоит из трех компонентов

  • Контейнеры

  • Алгоритмы

  • Итераторы

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

Контейнер - это объект, который хранит данные в памяти в организованном виде. Контейнеры в STL реализуются с помощью классов шаблонов и поэтому могут быть легко изменены и настроены для хранения различных типов данных.

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

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

Container-STL-in-C++

Продолжаем статью о STL в C ++

Контейнеры

STL определяет десять контейнеров, которые сгруппированы в три категории.

Контейнеры

Описание

Заголовочный файл

Итератор

Вектор

Его можно определить как динамический массив. Это разрешает прямой доступ к любому элементу.

Произвольный доступ

Список

Это двунаправленный линейный список. Он позволяет вставлять и удалять где угодно

Двунаправленный

и

Это двусторонняя очередь. Позволяет вставлять и удалять с обоих концов. Обеспечивает прямой доступ к любому элементу.

Произвольный доступ

набор

Это вспомогательный контейнер для хранения уникальных наборов. Позволяет быстрый поиск.

Двунаправленный

мультимножество

Это вспомогательный контейнер для хранения неуникальных наборов.

Двунаправленный

карта

Это вспомогательный контейнер для хранения уникальных пар ключ / значение. Каждый ключ связан только с одним значением.

Двунаправленный

Multimap

Это связанный контейнер для хранения ключа / значения, в котором один ключ может быть связан с более чем одним значением (отображение «один ко многим»). Это позволяет поиск по ключу.

Двунаправленный

стек

Стандартный стек следует по принципу «последним пришел - первым ушел» (LIFO)

Без итератора

очередь

Стандартная очередь следует по принципу «первым пришел - первым ушел» (FIFO)

Без итератора

приоритетная очередь

Первым выходящим элементом всегда является элемент с наивысшим приоритетом

Без итератора

Контейнеры последовательности

В контейнерах последовательности элементы хранятся в линейном порядке. Все элементы связаны друг с другом своим положением на линии. Они позволяют вставлять элементы, и все они поддерживают несколько операций над ними.

STL предоставляет три типа элементов последовательности:

  • Вектор
  • Список
  • и

Ассоциативные контейнеры:

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

ассоциативные контейнеры:

  1. Набор
  2. Multiset
  3. карта
  4. Multimap

Все вышеперечисленные контейнеры хранят данные в структуре, называемой деревом, что позволяет быстро

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

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

называется значение.

Производные контейнеры:

STL предоставляет три производных контейнера, а именно: stack, queue и priority_queue. Они также известны как адаптеры контейнера.

Есть три типа производных контейнеров:

1. стек

2. очередь

3.Priority_quue

Стеки, очереди и приоритетные очереди могут быть легко созданы из различных контейнеров последовательностей. Производные контейнеры не поддерживают итераторы, поэтому мы не можем использовать их для обработки данных. Однако они поддерживают две функции-члены pop () и push () для реализации операций удаления и вставки.

Продолжаем статью о STL в C ++

Алгоритмы

Алгоритмы - это функции, которые обычно можно использовать в различных контейнерах для обработки своего содержимого. Хотя каждый контейнер предоставляет функции для своих основных операций, STL предоставляет более шестидесяти стандартных алгоритмов для поддержки более расширенных или сложных операций. Стандартные алгоритмы также позволяют нам работать с двумя разными типами контейнеров одновременно.

Алгоритмы STL усиливают философию повторного использования. Используя эти алгоритмы, программисты могут сэкономить много времени и усилий. Чтобы иметь доступ к алгоритмам STL, мы должны включить их в нашу программу.

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

  • Немутантные алгоритмы

  • Мутирующие алгоритмы

  • Алгоритмы сортировки

  • Установить алгоритмы

  • Реляционный алгоритм

Продолжаем статью о STL в C ++

Итераторы:

Итераторы действуют как указатели и используются для доступа к элементам контейнера. Мы используем итераторы для перемещения по содержимому контейнеров. Итераторы обрабатываются так же, как указатели. Мы можем увеличивать или уменьшать их в соответствии с нашими требованиями. Итераторы соединяют контейнеры с алгоритмами и играют жизненно важную роль в манипулировании данными, хранящимися в контейнерах. Они часто используются для перехода от одного элемента к другому, этот процесс называется итерацией по контейнеру.

Есть пять типов итераторов:

1. вход

2. выход

3. Вперед

4. двунаправленный

5. случайный

Итератор

Метод доступа

Направление движения

Возможность ввода / вывода

Замечание

Ввод

Линейный

Только вперед

алгоритм фибоначчи c ++

Только чтение

Не может быть сохранен

Вывод

Линейный

Только вперед

Только писать

Не может быть сохранен

Вперед

Линейный

Только вперед

Читай пиши

Можно спасти

Двунаправленный

Линейный

Вперед и назад

Читай пиши

Можно спасти

Случайный

Случайный

Вперед и назад

Читай пиши

Можно спасти

Разные типы итераторов должны использоваться с разными типами контейнеров, так что только

Последовательные и ассоциативные контейнеры могут перемещаться через итераторы. Каждый тип итераторов используется для выполнения определенных функций. Итераторы ввода и вывода поддерживают наименьшее количество функций. Их можно использовать только для прохода в контейнере. Прямые итераторы поддерживают все операции итераторов ввода и вывода, а также сохраняют свою позицию в контейнере. Двунаправленный итератор, поддерживая все операции прямого итератора, обеспечивает возможность перемещения в обратном направлении в контейнере.

На этом мы подошли к концу статьи о «STL в C ++». Если вы хотите узнать больше, ознакомьтесь с от Edureka, надежной компании онлайн-обучения. Курс обучения и сертификации по Java J2EE и SOA от Edureka разработан, чтобы научить вас базовым и продвинутым концепциям Java, а также различным средам Java, таким как Hibernate и Spring.

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев этого блога, и мы свяжемся с вами как можно скорее.