Натрупвайте C++ STL с пример
⚡ Умно обобщение
Натрупвайте C++ STL имплементира LIFO контейнерен адаптер, който добавя и премахва елементи от един край, обвиващping основен контейнер за последователности, като например deque, vector или list, за управление на подредени данни.

Какво е std::stack?
Стекът е структура от данни, която работи въз основа на техниката LIFO (последен влязъл, първи излязъл). std::stack позволява добавяне и премахване на елементи само от единия край.
Класът std::stack е адаптер за контейнери. Обектите тип „контейнер“ съдържат данни от подобен тип. Можете да създадете стек от различни контейнери за последователности. Ако не е предоставен контейнер, по подразбиране ще се използва контейнерът deque. Адаптерите за контейнери не поддържат итератори, така че не могат да се използват за манипулиране на данни.
Синтаксис на стека
За да създадем стек, трябва да включим заглавен файл в нашия код. След това използваме този синтаксис, за да дефинираме std::stack:
template <class Type, class Container = deque<Type> > class stack;
- Тип – е типът на елемента, съдържащ се в std::stack. Тя може да бъде всяка валидна C++ тип или дори дефиниран от потребителя тип.
- Контейнер – е типът на основния контейнерен обект.
Видове членове
Ето типовете членове на стека:
- тип_стойност– Първият параметър на шаблона, T. Той обозначава типовете елементи.
- тип_контейнер– Вторият параметър на шаблона, Контейнер. Той обозначава типа на основния контейнер.
- тип_размер– Тип беззнаково интегрално число.
Operaции в Stack
A C++ стекът поддържа следните основни операции:
- тласък – Добавя/избутва елемент в стека.
- поп – Премахва/изважда елемент от стека.
- поглед – Връща най-горния елемент от стека, без да го премахва.
- еПълно – Проверява дали стекът е пълен.
- празно е – Проверява дали стекът е празен.
Реализация на стека
Следните стъпки показват как горната част на стека се измества, когато елементите се избутват и след това се изваждат:
Стъпка 1) Първоначално имаме празен стек. Върхът на празния стек е зададен на -1.
Стъпка 2) След това сме добавили елемент 5 в стека. Върхът на стека ще сочи към елемент 5.
Стъпка 3) След това сме добавили елемент 50 в стека. Върхът на стека се измества и сочи към елемент 50.
Стъпка 4) След това извършихме операция „изваждане“, премахвайки най-горния елемент от стека. Елемент 50 е изваден от стека. Върхът на стека вече сочи към елемент 5.
push() и pop()
Функцията stack::push() добавя нов елемент към върха на стека. Размерът на стека се увеличава с 1 след вмъкването. Функцията приема следния синтаксис:
stack.push(value)
Стойността е елементът, който да се вмъкне в стека.
Функцията stack::pop() премахва най-горния елемент от стека. Това е най-новият елемент в стека. Размерът на стека се намалява с 1 след премахването. Ето синтаксисът на функцията:
stack.pop()
Функцията не приема параметри.
Пример 1:
#include <iostream> #include <stack> using namespace std; int main() { stack<int> st; st.push(10); st.push(20); st.push(30); st.push(40); st.pop(); st.pop(); while (!st.empty()) { cout << ' ' << st.top(); st.pop(); } }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включете заглавния файл на iostream в нашия код, за да използвате неговите функции.
- Включете заглавния файл на стека в нашия код, за да използвате неговите функции.
- Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тази функция.
- Създайте стек st за съхраняване на цели числа.
- Използвайте функцията push(), за да вмъкнете стойността 10 в стека.
- Използвайте функцията push(), за да вмъкнете стойността 20 в стека.
- Използвайте функцията push(), за да вмъкнете стойността 30 в стека.
- Използвайте функцията push(), за да вмъкнете стойността 40 в стека.
- Използвайте функцията pop(), за да премахнете най-горния елемент от стека, тоест 40. Най-горният елемент сега става 30.
- Използвайте функцията pop(), за да премахнете най-горния елемент от стека, тоест 30. Най-горният елемент сега става 20.
- Използвайте цикъл while и функция empty(), за да проверите дали стекът НЕ е празен. The ! е операторът NOT.
- Отпечатване на текущото съдържание на стека на конзолата.
- Извикайте функцията pop() в стека.
- Край на тялото на цикъла while.
- Край на тялото на функцията main().
празен(), размер(), топ()
Стековете имат вградени функции, които можете да използвате, за да си поиграете със стека и неговите стойности. Те включват:
- празно()– проверява дали стекът е празен или не.
- размер ()– връща размера на стека, т.е. броя на елементите в него.
- отгоре()– осъществява достъп до елемента на стека в горната част.
Пример 2:
#include <iostream> #include <stack> using namespace std; void createStack(stack <int> mystack) { stack <int> ms = mystack; while (!ms.empty()) { cout << '\t' << ms.top(); ms.pop(); } cout << '\n'; } int main() { stack <int> st; st.push(32); st.push(21); st.push(39); st.push(89); st.push(25); cout << "The stack st is: "; createStack(st); cout << "\n st.size() : " << st.size(); cout << "\n st.top() : " << st.top(); cout << "\n st.pop() : "; st.pop(); createStack(st); return 0; }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включете заглавния файл на iostream в нашия код, за да използвате неговите функции.
- Включете заглавния файл на стека в нашия код, за да използвате неговите функции.
- Включете пространството от имена std в нашата програма, за да използвате неговите класове, без да го извиквате.
- Създайте функцията createStack, която можем да използваме за създаване на стека mystack. Стекът ще съдържа набор от цели числа.
- Началото на тялото на функцията createStack.
- Създайте екземпляр на типа данни mystack и му дайте името ms.
- Използвайте цикъла while и функцията empty(), за да проверите дали стекът е празен.
- Началото на тялото на цикъла while.
- Използвайте функцията top(), съхранена в горната част на стека. Символът \t ще създаде нов раздел.
- Използвайте функцията pop(), за да изтриете елемента в горната част на стека.
- Край на тялото на цикъла while.
- Отпечатайте празен ред на конзолата.
- Край на тялото на функцията createStack.
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тялото на функцията main().
- Началото на тялото на функцията main().
- Създайте стеков обект st.
- Използвайте функцията push(), за да вмъкнете елемент 32 в стека.
- Използвайте функцията push(), за да вмъкнете елемент 21 в стека.
- Използвайте функцията push(), за да вмъкнете елемент 39 в стека.
- Използвайте функцията push(), за да вмъкнете елемент 89 в стека.
- Използвайте функцията push(), за да вмъкнете елемент 25 в стека.
- Отпечатайте малко текст на конзолата.
- Извикайте функцията createStack, за да изпълните горните операции за вмъкване в стека.
- Отпечатайте размера на стека на конзолата заедно с друг текст.
- Отпечатайте елемента в горната част на стека на конзолата.
- Отпечатайте малко текст на конзолата.
- Изтрийте елемента в горната част на стека. След това ще върне елементите, останали в стека.
- Извикайте функцията createStack, за да изпълните горните операции.
- Програмата трябва да върне стойност при успешно завършване.
- Край на тялото на функцията main().
emplace() и swap()
Това са други вградени стекови функции:
- място()– конструкциите след това вмъкват нов елемент на върха на стека.
- размяна()– обменя съдържанието на стека със съдържанието на друг стек.
Пример 3:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st1; stack<int> st2; st1.emplace(12); st1.emplace(19); st2.emplace(20); st2.emplace(23); st1.swap(st2); cout << "st1 = "; while (!st1.empty()) { cout << st1.top() << " "; st1.pop(); } cout << endl << "st2 = "; while (!st2.empty()) { cout << st2.top() << " "; st2.pop(); } }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включете заглавния файл на iostream в нашия код, за да използвате неговите функции.
- Включете заглавния файл на стека в нашия код, за да използвате неговите функции.
- Включете заглавния файл cstdlib в нашия код, за да използвате неговите функции.
- Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
- Извикайте функцията main(). Логиката на програмата ще бъде добавена в тялото на тази функция.
- Декларирайте стек с име st1 за съхраняване на цели числа.
- Декларирайте стек с име st2 за съхраняване на цели числа.
- Използвайте функцията emplace(), за да вмъкнете цяло число 12 в стека с име st1.
- Използвайте функцията emplace(), за да вмъкнете цяло число 19 в стека с име st1.
- Използвайте функцията emplace(), за да вмъкнете цяло число 20 в стека с име st2.
- Използвайте функцията emplace(), за да вмъкнете цяло число 23 в стека с име st2.
- Използвайте функцията swap(), за да размените съдържанието на двата стека, st1 и st2. Съдържанието на стека st1 трябва да бъде преместено в стека st2. Съдържанието на стека st2 трябва да бъде преместено в стека st1.
- Отпечатайте малко текст на конзолата.
- Използвайте оператора while и функцията empty(), за да проверите дали стекът st1 не е празен.
- Отпечатайте съдържанието на стека st1 на конзолата. ” ” добавя разстояние между елементите на стека, когато ги отпечатвате на конзолата.
- Изпълнете функцията pop() на стека st1, за да премахнете горния елемент.
- Край на тялото на оператора while.
- Отпечатайте малко текст на конзолата. Краят е a C++ ключова дума за крайния ред. Той премества курсора на мишката на следващия ред, за да започне да печата оттам.
- Използвайте оператора while и функцията empty(), за да проверите дали стекът st2 не е празен.
- Отпечатайте съдържанието на стека st2 на конзолата. ” ” добавя разстояние между елементите на стека, когато ги отпечатвате на конзолата.
- Изпълнете функцията pop() на стека st2, за да премахнете горния елемент.
- Край на тялото на оператора while.
- Край на тялото на функцията main().
Стек в STL
STL (Standard Template Library) идва с шаблонни класове, които предоставят общ C++ структури от данни. Следователно стекът може да бъде реализиран и в STL. Ние просто включваме тази библиотека в нашия код и я използваме, за да дефинираме стек.
stack<T> st;
Горният синтаксис декларира стек към елементи от тип данни T.
Пример 4:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st; st.push(12); st.push(19); st.push(20); cout << st.top(); cout << st.size(); }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включете заглавния файл на iostream в нашия код, за да използвате неговите функции.
- Включете заглавния файл на стека в нашия код, за да използвате неговите функции.
- Включете заглавния файл cstdlib в нашия код, за да използвате неговите функции.
- Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тялото на тази функция.
- Декларирайте стек st за съхраняване на целочислени данни.
- Добавете елемент 12 към стека.
- Добавете елемент 19 към стека.
- Добавете елемент 20 към стека.
- Отпечатайте елемента в горната част на стека на конзолата.
- Отпечатайте размера на стека на конзолата.
- Край на тялото на функцията main().






