C ++ - один из самых мощных и устрашающих языков программирования, с которыми вы можете столкнуться как новичок. Причина довольно проста. Для достижения желаемого результата требуется много кода. Стандартная библиотека шаблонов, или STL, может помочь вам решить эту загадку.

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

Что такое стандартная библиотека шаблонов?

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

Стандартная библиотека шаблонов в C ++ состоит из четырех компонентов:

instagram viewer
  1. Алгоритмы
  2. Контейнеры
  3. Функции
  4. Итераторы

Давайте рассмотрим алгоритмы и контейнеры более подробно, поскольку они являются наиболее часто используемыми компонентами STL.

Алгоритмы в STL

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

Для начала вам нужно импортировать заголовок в вашем файле C ++. Синтаксис следующий:

#включать 

Для будущих методов рассмотрим в качестве примера переменную массива со значениями {6, 2, 9, 1, 4}.

int arr [] = {6, 2, 9, 1, 4};

Сортировать()

В Сортировать() Функция помогает вам отсортировать все элементы внутри указанной структуры данных в порядке возрастания. Эта функция принимает два параметра: начальный итератор и конечный итератор.

Связанный: Введение в алгоритм сортировки слиянием

Синтаксис:

sort (start_iterator, end_iterator);

Вот краткий пример:

sort (arr, arr + 5);
для (int i = 0; я <5; i ++) {
cout << arr [i] << "";
}

Выход:

1 2 4 6 9

обеспечить регресс()

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

Синтаксис:

обратный (start_iterator, end_iterator);

Вот краткий пример описанного выше метода:

обратный (обр., обр. + 5);
для (int i = 0; я <5; i ++) {
cout << arr [i] << "";
}

Выход:

4 1 9 2 6

* min_element () и * max_element ()

Функции * max_element () а также * min_element () вернуть максимальное и минимальное значение внутри указанной структуры данных соответственно. Обе эти функции принимают два аргумента: начальный итератор и конечный итератор.

Синтаксис:

* max_element (start_iterator, end_iterator);
* min_element (start_iterator, end_iterator);

Давайте выясним, какие значения возвращают эти функции после их вызова в примере массива:

cout << * max_element (arr, arr + 5) << endl;
cout << * min_element (arr, arr + 5) << endl;

Выход:

9
1

binary_search ()

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

Двоичный поиск работает только с отсортированными структурами данных. Следовательно, вам нужно будет позвонить в Сортировать() метод сначала перед binary_search () метод.

Синтаксис:

двоичный_поиск (начальный_итератор, конечный_итератор, значение_то_поиск)

Вот демонстрация этого метода:

sort (arr, arr + 5);
двоичный_поиск (обр, обр + 5, 2)? cout << "Элемент найден": cout << "Элемент не найден";
двоичный_поиск (обр., обр. + 5, 7)? cout << "Элемент найден": cout << "Элемент не найден";

Выход:

Элемент найден
Элемент не найден

считать()

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

Синтаксис:

счетчик (начальный_итератор, конечный_итератор, значение_то_число);

Вот пример этого метода:

cout << count (arr, arr + 5, 2) << endl;

Выход:

1

Контейнеры в STL

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

При инициализации переменной контейнера необходимо указать примитивные данные, такие как int, char, нить внутри <> кронштейны.

Давайте рассмотрим некоторые из этих контейнеров более подробно:

Вектор

Векторы - это динамические массивы, размер которых можно изменять и с которыми можно работать. Когда вы вставляете или удаляете элемент из вектора, он автоматически регулирует размер вектора. Это похоже на Структура данных ArrayList в Java.

Синтаксис:

#включать 
вектор имя_переменной;

Вот несколько важных векторных методов:

  1. push_back (значение): Этот метод добавляет данные в вектор.
  2. pop_back (): Этот метод удаляет последний элемент из вектора.
  3. вставить (индекс, значение): Этот метод вставляет новые элементы перед элементом в указанной позиции.
  4. размер(): Этот метод возвращает размер вектора.
  5. пустой(): Этот метод проверяет, является ли вектор пустым или нет.
  6. фронт(): Этот метод возвращает первое значение вектора.
  7. назад(): Метод back возвращает последнее значение вектора.
  8. at (индекс): Этот метод возвращает значение в указанной позиции.
  9. стереть (индекс): Метод стирания удаляет элементы из данного индекса.
  10. Чисто(): Этот метод очищает все элементы в векторе.
вектор  v = {23, 12, 56, 10};
v.push_back (5);
v.push_back (25);
v.pop_back ();
авто i = v.insert (v.begin () + 1, 7);
cout << "Размер данного вектора" << v.size () << endl;
if (v.empty ()) {
cout << "Вектор пуст" << endl;
} еще {
cout << "Вектор не пуст" << endl;
}
cout << "Элемент на первой позиции:" << v.front () << endl;
cout << "Элемент в последней позиции:" << v.back () << endl;
cout << "Элемент в данной позиции:" << v.at (4) << endl;
v.erase (v.begin () + 1);
для (int i = 0; я cout << v [i] << "";
}

Выход:

Размер данного вектора 6
Вектор не пустой
Элемент на первой позиции - 23
Элемент в последней позиции - 5
Элемент в данной позиции 10
23 12 56 10 5

Очередь

В структуре данных очереди элементы вставляются сзади и удаляются спереди. Следовательно, он следует подходу FIFO («первым пришел - первым ушел»).

Синтаксис:

#включать 
очередь имя_переменной;

Вот несколько важных методов очереди:

  1. push (значение): Этот метод добавляет элементы в очередь.
  2. поп (): Этот метод удаляет первый элемент очереди.
  3. размер(): Этот метод возвращает размер очереди.
  4. фронт(): Этот метод возвращает первый элемент очереди.
  5. назад(): Этот метод возвращает последний элемент очереди.
очередь  q;
q.push (30);
q.push (40);
q.push (50);
q.push (60);
q.push (70);
cout << "Первый элемент -" << q.front () << endl;
cout << "Последний элемент -" << q.back () << endl;
cout << "Размер очереди равен" << q.size () << endl;
q.pop ();
cout << "Печать всех элементов очереди" << endl;
while (! q.empty ()) {
cout << q.front () << "";
q.pop ();
}

Выход:

Первый элемент - 30
Последний элемент - 70
Размер очереди 5
Печать всех элементов очереди
40 50 60 70

Куча

Контейнеры стека работают по методу LIFO. LIFO означает «последний пришел - первым ушел». Данные отправляются и извлекаются с одного конца.

Синтаксис:

#включать 
куча имя_переменной;

Вот несколько важных методов стека:

  1. push (значение): Этот метод помещает элемент в стек.
  2. поп (): Этот метод удаляет верхний элемент стека.
  3. вершина(): Этот метод возвращает значение последнего элемента, введенного в стек.
  4. размер(): Этот метод возвращает размер стека.
  5. пустой(): Этот метод проверяет, пуст ли стек.
стек  s;
s.push (30);
s.push (40);
s.push (50);
s.push (60);
cout << "Вверху стека находится" << s.top () << endl;
s.pop ();
cout << "Верх стека после выполнения операции pop:" << s.top () << endl;
cout << "Печать всех элементов стека" << endl;
while (! s.empty ()) {
cout << s.top () << "";
s.pop ();
}

Выход:

Вверху стопки 60
Верх стека после выполнения операции выталкивания: 50
Печать всех элементов стека
50 40 30

Набор

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

Синтаксис:

#включать 
набор имя_переменной;

Вот несколько важных методов набора:

  1. вставить (значение): Этот метод вставляет элементы в набор.
  2. начинать(): Этот метод возвращает итератор к первому элементу набора.
  3. конец(): Этот метод возвращает итератор к последнему элементу набора.
  4. размер(): Этот метод возвращает размер набора.
  5. пустой(): Этот метод проверяет, пуст ли набор.
  6. найти (значение): Этот метод возвращает итератор к элементу, переданному в параметре. Если элемент не найден, эта функция возвращает итератор в конец набора.
  7. стереть (значение): Этот метод удалил указанный элемент из набора.
установить  s;
s.insert (20);
s.insert (30);
s.insert (40);
s.insert (50);
s.insert (60);
s.insert (60);
s.insert (60);
авто я = s.begin ();
cout << "Элемент в первой позиции" << * i << endl;
cout << "Размер набора" << s.size () << endl;
s.find (20)! = s.end ()? cout << "Элемент найден" << endl: cout << "Элемент не найден" << endl;
s.erase (30);
cout << "Печать всех элементов" << endl;
для (авто i = s.begin (); я! = s.end (); i ++) {
cout << * i << "";
}

Выход:

Элемент на первой позиции 20
Размер набора 5
Элемент найден
Печать всех элементов
20 40 50 60

C ++ не должен быть сложным

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

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

Электронное письмо
Как научиться программированию на C ++: 6 сайтов для начала

Хотите изучить C ++? Вот лучшие веб-сайты и онлайн-курсы по C ++ для начинающих и опытных программистов.

Читать далее

Похожие темы
  • Программирование
  • Учебники по кодированию
  • Функциональное программирование
Об авторе
Нитин Ранганатх (Опубликовано 22 статей)

Нитин - заядлый разработчик программного обеспечения и студент компьютерной инженерии, разрабатывающий веб-приложения с использованием технологий JavaScript. Он работает внештатным веб-разработчиком и в свободное время любит писать для Linux и программирования.

Ещё от Nitin Ranganath

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!

Еще один шаг…!

Пожалуйста, подтвердите свой адрес электронной почты в электронном письме, которое мы вам только что отправили.

.