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

C++ предоставляет хороший набор встроенных библиотек. STL — это аббревиатура от стандартной библиотеки шаблонов. Это помогает ускорить разработку программного обеспечения и позволяет пользователю делать больше с меньшими затратами.

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

· Контейнеры

· Итераторы

· Алгоритмы

· Функции

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

  1. Вектор
  2. Очередь
  3. Куча
  4. Удалить из очереди

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

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

Основные операции с итераторами: –

1. begin(): функция-член begin() используется для возврата первой позиции элемента в контейнере.

2. end(): функция-член end() используется для возврата после конечной позиции элемента в контейнере.

3. advance(): функция-член advance() используется для увеличения позиции итератора до указанного числа, указанного в его аргументах. Мы можем использовать оператор «++» для увеличения одной позиции итератора.

4. rbegin():- Функция-член rbegin() возвращает обратный итератор к обратному началу. Он перемещается от последнего к первому элементу.

5. rend():- Функция-член rend() возвращает обратный итератор на обратный конец.

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

Синтаксис- вектор‹ тип_объекта › имя_вектора;

Основные операции, используемые в векторе:

size()- возвращает количество элементов, присутствующих в векторе. Временная сложность этой операции O(1). Синтаксис-vector_name.size();

  1. push_back() — выталкивает элементы позади вектора. Временная сложность этой операции O(1). Синтаксис-имя_вектора.push_back(элемент);
  2. pop_back() — удаляет последние элементы вектора. Временная сложность этой операции O(1). Синтаксис- имя_вектора.pop_back(элемент);
  3. insert() - вставляет новые элементы перед указанной позицией. Временная сложность этой операции O(1). Синтаксис-имя_вектора.вставка(позиция,элемент);
  4. erase() – удаляет элементы из указанной позиции или диапазона. Временная сложность этой операции O(n).Syntax-vector_name.earse(position);
  5. swap() — меняет содержимое одного вектора на другой вектор того же типа (размеры могут отличаться). Временная сложность этой операции составляет O (1) (она меняет местами адреса двух векторов, а не меняет местами каждый элемент по одному). Синтаксис- swap(vector_name1,vector_name2);
  6. empty() –проверить, пуст ли контейнер. Временная сложность этой операции O(1).Syntax-vector_name.empty();

Вывод приведенного выше кода:-

Размер : 5
Вектор v: 10 1 2 3 4
Является ли вектор v пустым? Нет
Вектор v1: 1 2 3
Вектор v2: 4 5 6
После замены:
Вектор v1: 4 5 6
Вектор v2: 1 2 3

Очереди.Очереди — это тип адаптера контейнера, предназначенный для работы в контексте FIFO (первым пришел — первым обслужен). В очереди элементы вставляются в один конец контейнера и извлекаются из другого.

Синтаксис- queue‹ тип_объекта › имя_очереди;

Операции с очередью: -

  1. empty()-Проверить, пуста ли очередь. Временная сложность этой операции O(1). Синтаксис-queue_name.empty();
  2. size()- Возвращает количество элементов в очереди. Временная сложность этой операции составляет O(1). Синтаксис-queue_name.size();
  3. push()-Эта функция добавляет элемент в конец очереди. Временная сложность этой операции составляет O(1). Синтаксис-имя_очереди.push(элемент);
  4. pop()- Эта функция удаляет первый элемент очереди. Сложность этой операции по времени составляет O(1). Синтаксис-queue_name.pop();
  5. front() Возвращает ссылку на первый элемент очереди. Временная сложность этой операции O(1). Синтаксис-queue_name.front();
  6. back() Возвращает ссылку на последний элемент очереди. Временная сложность этой операции составляет O(1). Синтаксис-queue_name.back();
  7. swap() — меняет местами содержимое одной очереди с другой очередью, но очереди должны быть одного типа, хотя размеры могут различаться. Временная сложность этой операции — O(1). Syntax-swap(queue_name1,queue_name2);

Вывод вышеуказанного кода: -

Очередь: 1 2 3 4 5
queue.size() : 5
queue.front() : 1
queue.back() : 5
queue.pop( ) : 2 3 4 5
Очередь пуста? да

Стек.Стеки — это тип адаптера контейнера, предназначенный для работы в контексте LIFO. В стеке элементы вставляются в один конец (сверху) контейнера и извлекаются с того же конца.

Синтаксис- stack‹ object_type › stack_name;

Операции стека: -

  1. empty()-Проверить, пуст ли стек. Временная сложность этой операции O(1). Синтаксис-стек_name.empty();
  2. size()- Возвращает количество элементов в стеке. Временная сложность этой операции составляет O(1). Синтаксис-стек_name.size();
  3. push()-Эта функция добавляет элемент на вершину стека. Временная сложность этой операции составляет O(1). Синтаксис-стек_name.push(element);
  4. pop()- Эта функция удаляет самый верхний элемент стека. Временная сложность этой операции составляет O(1). Синтаксис-стек_name.pop();
  5. top()- возвращает ссылку на самый верхний элемент стека. Временная сложность этой операции O(1). Синтаксис-стек_name.top();
  6. swap() — меняет местами содержимое одного стека с другим стеком, но стеки должны быть одного типа, хотя размеры могут различаться. Временная сложность этой операции — O(1). Синтаксис- swap(стек_name1,стек_name2);

Вывод вышеуказанного кода: -

Стек: 5 4 3 2 1
stack.size() : 5
stack.top() : 5
stack.pop() : 4 3 2 1
стек пустой? да

Deque (Double Ended Queue) – это контейнеры последовательностей, представляющие собой обобщенную версию Queue. Это позволяет вставлять и удалять с обоих концов. Он поддерживает работу как со стеком, так и с очередью.

Синтаксис:-deque‹int› deque_name;

Операции Deque: -

  1. insert()- вставляет элемент и возвращает итератор, указывающий на первый из вновь вставленных элементов. Синтаксис:-deque.insert(итератор, элемент);
  2. push_front() – эта функция используется для вставки элементов в очередь с начала. Синтаксис:-deque.push_front(element);
  3. push_back() – эта функция используется для вставки элементов в очередь с обратной стороны. Синтаксис:-deque.push_back(элемент);
  4. pop_front() – эта функция используется для удаления элементов из очереди с начала. Синтаксис:-deque.pop_front();
  5. pop_back().Этафункция используется для удаления элементов из двухсторонней очереди сзади. Синтаксис:-deque.pop_back();
  6. front()- Эта функция используется для ссылки на первый элемент контейнера очереди. Синтаксис:-deque.front();
  7. back()- Эта функция используется для ссылки на последний элемент контейнера очереди. Синтаксис:-deque.back();
  8. erase()- эта функция используется для удаления элементов из контейнера из указанной позиции или диапазона. Синтаксис:-deque.erase(position1,position2);
  9. empty()- Эта функция используется для проверки того, пуст ли контейнер deque. Синтаксис:-deque.empty();
  10. size()- Эта функция используется для возврата количества элементов в контейнере deque. Синтаксис:-deque.size();

Все вышеперечисленные операции имеют временную сложность O(1).

Вывод вышеуказанного кода: -

Deque: 5 4 3 2 1 6
Deque.size() : 6
Deque.front() : 5
Deque.back() : 6
Deque.pop_back () & вставка 10 : 6 1 2 3 4 5 10
Стек пуст? да

Алгоритм:-

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

Функция Sorting-sort() используется для сортировки элементов массива или вектора в порядке возрастания.

Синтаксис-sort(start_position,end_position);

Временная сложность — O (N log N).

Теперь вопрос в том, как мы можем отсортировать в порядке убывания?

Мы можем сортировать в любом порядке, передав третий параметр, чтобы указать порядок сортировки. В порядке убывания: -

Синтаксис- sort(начальная_позиция,конечная_позиция, больший‹тип_объекта›());

Вывод вышеуказанного кода: -

Массив:
1 10 11 2 7 9 2 2
Массив после сортировки По возрастанию :
1 2 2 2 7 9 10 11
Массив после сортировки По убыванию Порядок :
> 11 10 9 7 2 2 2 1

Заключение
STL очень помогает сделать ваш код коротким и пригодным для повторного использования. Это очень полезно для соревновательного программирования. Вы можете быстро кодировать, используя STL. Кроме того, его можно расширять, позволяя добавлять собственные контейнеры и алгоритмы.

Научиться использовать STL — задача не из легких. Мы не можем охватить всю тему в одной статье. Оставайтесь на связи с нами, чтобы узнать больше о STL.