C ++ е един от най-мощните и плашещи езици за програмиране, който може да срещнете като начинаещ. Причината е доста ясна. Изисква много код за постигане на желания резултат. Стандартната библиотека с шаблони или STL може да ви помогне да разрешите тази загадка.

Имайки предвид количеството време и усилия, изразходвани при писане на код за функции като сортиране и търсене, STL може да ви помогне да извършите всички тези операции само с един ред код. Тази библиотека може да бъде изключително полезна за решаване на проблеми и техническа подготовка за интервю.

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

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

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

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

Нека да разгледаме по-задълбочено алгоритмите и контейнерите, тъй като това са най-често използваните компоненти на STL.

Алгоритми в STL

The заглавният файл е част от STL, която се състои от няколко алгоритмични функции, които могат да се използват, вместо да ги кодират ръчно. Някои от включените алгоритми са двоично търсене, сортиране и обратно, които са изключително полезни.

Като начало трябва да импортирате заглавката във вашия C ++ файл. Синтаксисът е както следва:

#include 

За предстоящите методи разгледайте променлива на масив със стойностите на {6, 2, 9, 1, 4} като пример.

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

вид()

The вид() функцията ви помага да сортирате всички елементи вътре в посочената структура от данни във възходящ ред. Тази функция приема два параметъра: начален итератор и завършващ итератор.

Свързани: Въведение в алгоритъма за сортиране на обединяване

Синтаксис:

сортиране (start_iterator, end_iterator);

Ето един бърз пример:

сортиране (arr, arr + 5);
за (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}

Изход:

1 2 4 6 9

обратен()

The обратен() функция обръща реда на елементите в посочената структура от данни. Той приема два параметъра: начален итератор и завършващ итератор.

Синтаксис:

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

Ето кратък пример за горния метод:

обратно (arr, arr + 5);
за (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}

Изход:

4 1 9 2 6

* min_element () и * max_element ()

Функциите * max_element () и * min_element () връща съответно максималната и минималната стойност в определената структура от данни. И двете функции приемат два аргумента: начален итератор и краен итератор.

Синтаксис:

* max_element (начален_итератор, краен_итератор);
* min_element (start_iterator, end_iterator);

Нека да разберем какви стойности връщат тези функции при извикването им в примерния масив:

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

Изход:

9
1

binary_search ()

The binary_search () метод се използва, за да се установи дали посочената стойност присъства в структурата на данните или не. Той приема три аргумента: начален итератор, завършващ итератор и стойността, която искате да намерите.

Двоичното търсене работи само върху сортирани структури от данни. Следователно ще трябва да се обадите на вид() метод първо преди binary_search () метод.

Синтаксис:

binary_search (start_iterator, end_iterator, value_to_find)

Ето демонстрация на този метод:

сортиране (arr, arr + 5);
binary_search (arr, arr + 5, 2)? cout << "Елементът е намерен": cout << "Елементът не е намерен";
binary_search (arr, arr + 5, 7)? cout << "Елементът е намерен": cout << "Елементът не е намерен";

Изход:

Намерен елемент
Елементът не е намерен

броя()

The броя() метод връща броя на появата на посочената стойност в структурата на данните. Необходими са три аргумента: начален итератор, краен итератор и стойността, която трябва да се преброи.

Синтаксис:

брой (start_iterator, end_iterator, value_to_count);

Ето пример за този метод:

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

Изход:

1

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

Контейнерите са структурите за данни, които съхраняват обекти и данни. Вектори, списъци, стекове, опашки, набори и карти са някои от примерите, които съхраняват данни в тях според посочения примитивен тип данни. Можете да използвате тези контейнери, като импортирате съответните им заглавки във файла C ++.

Докато инициализирате променливата на контейнера, трябва да споменете примитивните данни като инт, char, низ вътре в <> скоби.

Нека разгледаме някои от тези контейнери по-подробно:

Вектор

Векторите са динамични масиви, които могат да бъдат преоразмерявани и гъвкави за работа. Когато вмъквате или изтривате елемент от вектора, той автоматично регулира размера на вектора. Това е подобно на Структура от данни на ArrayList в Java.

Синтаксис:

#include 
вектор име на променлива;

Ето някои важни векторни методи:

  1. push_back (стойност): Този метод добавя данните към вектора.
  2. pop_back (): Този метод премахва последния елемент от вектора.
  3. вмъкване (индекс, стойност): Този метод вмъква нови елементи преди елемента в посочената позиция.
  4. размер (): Този метод връща размера на вектора.
  5. празен (): Този метод проверява дали векторът е празен или не.
  6. отпред (): Този метод връща първата стойност на вектора.
  7. обратно(): Методът back връща последната стойност на вектора.
  8. в (индекс): Този метод връща стойността на посочената позиция.
  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; i cout << v [i] << "";
}

Изход:

Размерът на дадения вектор 6
Векторът не е празен
Елементът на първата позиция е 23
Елементът на последната позиция е 5
Елементът на дадената позиция е 10
23 12 56 10 5

Опашка

В структурата на данните за опашката елементите се вмъкват отзад и се изтриват отпред. Следователно, той следва подхода FIFO („първи влез, първи излезе“).

Синтаксис:

#include 
опашка име на променлива;

Ето някои важни методи за опашка:

  1. push (стойност): Този метод добавя елементи към опашката.
  2. поп (): Този метод изтрива първия елемент от опашката.
  3. размер (): Този метод връща размера на опашката.
  4. отпред (): Този метод връща първия елемент от опашката.
  5. обратно(): Този метод връща последния елемент от опашката.
опашка  q;
q.бутане (30);
q.бутане (40);
q.бутане (50);
q.бутане (60);
q.бутане (70);
cout << "Първият елемент е" << q.front () << endl;
cout << "Последният елемент е" << q.back () << endl;
cout << "Размерът на опашката е" << q.size () << endl;
q.pop ();
cout << "Отпечатване на всички елементи на опашката" << endl;
докато (! q.empty ()) {
cout << q.front () << "";
q.pop ();
}

Изход:

Първият елемент е 30
Последният елемент е 70
Размерът на опашката е 5
Отпечатване на всички елементи на опашката
40 50 60 70

Стек

Контейнерите за стека работят по метода LIFO. LIFO означава „последен, първи излязъл“. Данните се изтласкват и изскачат от същия край.

Синтаксис:

#include 
стек име на променлива;

Ето някои важни методи за стека:

  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 << "Върхът на стека след извършване на поп операция:" << s.top () << endl;
cout << "Отпечатване на всички елементи на стека" << endl;
докато (! s.empty ()) {
cout << s.top () << "";
s.pop ();
}

Изход:

Горната част на стека съдържа 60
Горната част на стека след извършване на поп операция: 50
Отпечатване на всички елементи на стека
50 40 30

Комплект

Контейнерите за набор се използват за съхраняване на уникални стойности и стойността на елемента не може да се променя, след като бъде вкаран в набора. Всички елементи в набора се съхраняват по сортиран начин. Зададеният контейнер е подобен на задайте структура на данните в Python.

Синтаксис:

#include 
комплект име на променлива;

Ето някои важни методи:

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

Изход:

Елемент на първа позиция 20
Размерът на комплекта 5
Намерен елемент
Отпечатване на всички елементи
20 40 50 60

C ++ не трябва да бъде твърд

Както всяко друго умение, практиката е от съществено значение, за да се възползвате максимално от STL. Тези контейнери и алгоритми могат да ви помогнат да спестите много време и са лесни за използване. Започнете с практикуването на примерите, показани по-горе и в крайна сметка ще започнете да го използвате и в собствените си проекти.

Ако обаче за първи път изучавате C ++, започнете с изучаването на основите, преди да продължите да разбирате STL.

електронна поща
Как да научите програмиране на C ++: 6 сайта, за да започнете

Искате ли да научите C ++? Ето най-добрите уебсайтове и онлайн курсове за C ++ за начинаещи и програмисти с опит.

Прочетете Напред

Свързани теми
  • Програмиране
  • Уроци за кодиране
  • Функционално програмиране
За автора
Нитин Ранганат (22 статии публикувани)

Нитин е запален разработчик на софтуер и студент по компютърно инженерство, разработващ уеб приложения, използващи JavaScript технологии. Работи като уеб разработчик на свободна практика и обича да пише за Linux и програмиране в свободното си време.

Още от Нитин Ранганат

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и ексклузивни оферти!

Още една стъпка…!

Моля, потвърдете имейл адреса си в имейла, който току-що ви изпратихме.

.