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