C ++ - один из самых мощных и устрашающих языков программирования, с которыми вы можете столкнуться как новичок. Причина довольно проста. Для достижения желаемого результата требуется много кода. Стандартная библиотека шаблонов, или STL, может помочь вам решить эту загадку.
Учитывая количество времени и усилий, затрачиваемых на написание кода для таких функций, как сортировка и поиск, STL может помочь вам выполнить все эти операции с помощью всего одной строчки кода. Эта библиотека может быть чрезвычайно полезна для решения проблем и подготовки к техническим собеседованиям.
Что такое стандартная библиотека шаблонов?
Стандартная библиотека шаблонов или STL - это библиотека C ++, состоящая из предварительно созданных функций и контейнеров. Он включает в себя несколько известных шаблонных классов для общих структур данных, таких как векторы, стеки, очереди, и некоторые удобные алгоритмические функции, такие как двоичный поиск, чтобы упростить программирование.
Стандартная библиотека шаблонов в C ++ состоит из четырех компонентов:
- Алгоритмы
- Контейнеры
- Функции
- Итераторы
Давайте рассмотрим алгоритмы и контейнеры более подробно, поскольку они являются наиболее часто используемыми компонентами 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.
Синтаксис:
#включать
вектор имя_переменной;
Вот несколько важных векторных методов:
- push_back (значение): Этот метод добавляет данные в вектор.
- pop_back (): Этот метод удаляет последний элемент из вектора.
- вставить (индекс, значение): Этот метод вставляет новые элементы перед элементом в указанной позиции.
- размер(): Этот метод возвращает размер вектора.
- пустой(): Этот метод проверяет, является ли вектор пустым или нет.
- фронт(): Этот метод возвращает первое значение вектора.
- назад(): Метод back возвращает последнее значение вектора.
- at (индекс): Этот метод возвращает значение в указанной позиции.
- стереть (индекс): Метод стирания удаляет элементы из данного индекса.
- Чисто(): Этот метод очищает все элементы в векторе.
вектор 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 («первым пришел - первым ушел»).
Синтаксис:
#включать
очередь имя_переменной;
Вот несколько важных методов очереди:
- push (значение): Этот метод добавляет элементы в очередь.
- поп (): Этот метод удаляет первый элемент очереди.
- размер(): Этот метод возвращает размер очереди.
- фронт(): Этот метод возвращает первый элемент очереди.
- назад(): Этот метод возвращает последний элемент очереди.
очередь 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 означает «последний пришел - первым ушел». Данные отправляются и извлекаются с одного конца.
Синтаксис:
#включать
куча имя_переменной;
Вот несколько важных методов стека:
- push (значение): Этот метод помещает элемент в стек.
- поп (): Этот метод удаляет верхний элемент стека.
- вершина(): Этот метод возвращает значение последнего элемента, введенного в стек.
- размер(): Этот метод возвращает размер стека.
- пустой(): Этот метод проверяет, пуст ли стек.
стек 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.
Синтаксис:
#включать
набор имя_переменной;
Вот несколько важных методов набора:
- вставить (значение): Этот метод вставляет элементы в набор.
- начинать(): Этот метод возвращает итератор к первому элементу набора.
- конец(): Этот метод возвращает итератор к последнему элементу набора.
- размер(): Этот метод возвращает размер набора.
- пустой(): Этот метод проверяет, пуст ли набор.
- найти (значение): Этот метод возвращает итератор к элементу, переданному в параметре. Если элемент не найден, эта функция возвращает итератор в конец набора.
- стереть (значение): Этот метод удалил указанный элемент из набора.
установить 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 ++? Вот лучшие веб-сайты и онлайн-курсы по C ++ для начинающих и опытных программистов.
Читать далее
- Программирование
- Учебники по кодированию
- Функциональное программирование
Нитин - заядлый разработчик программного обеспечения и студент компьютерной инженерии, разрабатывающий веб-приложения с использованием технологий JavaScript. Он работает внештатным веб-разработчиком и в свободное время любит писать для Linux и программирования.
Подписывайтесь на нашу новостную рассылку
Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!
Еще один шаг…!
Пожалуйста, подтвердите свой адрес электронной почты в электронном письме, которое мы вам только что отправили.