174 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | ||
| title: stack
 | ||
| localeTitle: стек
 | ||
| ---
 | ||
| ## Стеки
 | ||
| 
 | ||
| `stack` является одним из наиболее используемых контейнеров в C ++. Контейнер представляет собой структуру данных, которая хранит коллекцию объектов, некоторые по порядку, некоторые - нет. Все контейнеры имеют другой набор функций, которые позволяют вам получить доступ к объекту (объектам) в этой коллекции.
 | ||
| 
 | ||
| `std::stack` является частью стандартной библиотеки C ++ (отсюда и префикс `std::` и позволяет хранить данные в порядке последнего в первом выводе (LIFO). ПРИМЕЧАНИЕ. **Все объекты в стеке должны быть одного типа данных**
 | ||
| 
 | ||
| Тип данных, который вы храните в стеке, находится в угловых скобках рядом с ключевым словом стека. Например, если вы хотите сохранить коллекцию целых чисел, стек будет `std::stack<int> stack_name`
 | ||
| 
 | ||
| ### Стек LIFO Пояснение
 | ||
| 
 | ||
| `stack` позволяет нам толкнуть и поп в определенном порядке. **Push** означает, что объект находится в верхней части стека. **Pop** означает вытащить последний вставленный объект из верхней части стека. Поэтому, когда вы нажимаете его вверху, и когда вы поп вы извлекаете последний вставленный элемент.
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ### Операции с стеками
 | ||
| 
 | ||
| Контейнер стека поддерживает следующие операции:
 | ||
| 
 | ||
| *   От себя
 | ||
| *   поп
 | ||
| *   пустой
 | ||
| *   размер
 | ||
| *   назад
 | ||
| 
 | ||
| #### От себя
 | ||
| 
 | ||
| Позволяет вставить новый элемент в верхней части стека, над текущим верхним элементом.
 | ||
| 
 | ||
| ```cpp
 | ||
| //Push operation in Stack 
 | ||
|  #include <iostream>       // std::cout 
 | ||
|  #include <stack>          // std::stack 
 | ||
|  
 | ||
|  int main () 
 | ||
|  { 
 | ||
|   std::stack<int> s; 
 | ||
|  
 | ||
|   s.push(1);    //Pushing 1 at top of the stack 
 | ||
|   s.push(2);    //Pushing 2 at top of the stack 
 | ||
|  
 | ||
|   return 0; 
 | ||
|  } 
 | ||
| ```
 | ||
| 
 | ||
| #### верхний
 | ||
| 
 | ||
| Позволяет получить доступ к верхнему элементу, не удаляя его из вашего стека.
 | ||
| 
 | ||
| ```cpp
 | ||
| //Top operation in Stack 
 | ||
|  #include <iostream>       // std::cout 
 | ||
|  #include <stack>          // std::stack 
 | ||
|  
 | ||
|  int main () 
 | ||
|  { 
 | ||
|   std::stack<int> s; 
 | ||
|  
 | ||
|   s.push(1);    //Pushing 1 at top of the stack 
 | ||
|   s.push(2);    //Pushing 2 at top of the stack 
 | ||
|  
 | ||
|   std::cout<<s.top()<<'\n';     //Accessing the top of the stack 
 | ||
|   std::cout<<s.top()<<'\n';     //Accessing the top of the stack 
 | ||
|  
 | ||
|   return 0; 
 | ||
|  } 
 | ||
| ```
 | ||
| 
 | ||
| ```
 | ||
| Output: 
 | ||
|  2 
 | ||
|  2 
 | ||
| ```
 | ||
| 
 | ||
| #### поп
 | ||
| 
 | ||
| Удаляет элемент поверх стека, эффективно уменьшая размер вашего стека на единицу.
 | ||
| 
 | ||
| ```cpp
 | ||
| //Pop operation in Stack 
 | ||
|  #include <iostream>       // std::cout 
 | ||
|  #include <stack>          // std::stack 
 | ||
|  
 | ||
|  int main () 
 | ||
|  { 
 | ||
|   std::stack<int> s; 
 | ||
|  
 | ||
|   s.push(1);    //Pushing 1 at top of the stack 
 | ||
|   s.push(2);    //Pushing 2 at top of the stack 
 | ||
|  
 | ||
|   std::cout<<s.top()<<'\n';   //Accessing the top of the stack 
 | ||
|   s.pop();                    //Removing element from the top of stack 
 | ||
|   std::cout<<s.top()<<'\n';   //Accessing the top of the stack 
 | ||
|  
 | ||
|  
 | ||
|   return 0; 
 | ||
|  } 
 | ||
| ```
 | ||
| 
 | ||
| ```
 | ||
| Output: 
 | ||
|  2 
 | ||
|  1 
 | ||
| ```
 | ||
| 
 | ||
| #### Размер
 | ||
| 
 | ||
| Возвращает количество элементов в `stack` .
 | ||
| 
 | ||
| ```cpp
 | ||
| //Size operation in Stack 
 | ||
|  #include <iostream>       // std::cout 
 | ||
|  #include <stack>          // std::stack 
 | ||
|  
 | ||
|  int main () 
 | ||
|  { 
 | ||
|   std::stack<int> s; 
 | ||
|  
 | ||
|   s.push(1);    //Pushing 1 at top of the stack 
 | ||
|   s.push(2);    //Pushing 2 at top of the stack 
 | ||
|  
 | ||
|   std::cout<<s.size()<<'\n';  //Showing the size of the stack 
 | ||
|   s.pop();                    //Removing element from the top of stack 
 | ||
|   std::cout<<s.size()<<'\n';  //Showing the size of the stack 
 | ||
|   s.pop();                    //Removing element from the top of stack 
 | ||
|   std::cout<<s.size()<<'\n';  //Showing the size of the stack 
 | ||
|  
 | ||
|   return 0; 
 | ||
|  } 
 | ||
| ```
 | ||
| 
 | ||
| ```
 | ||
| Output: 
 | ||
|  2 
 | ||
|  1 
 | ||
|  0 
 | ||
| ```
 | ||
| 
 | ||
| #### пустой
 | ||
| 
 | ||
| Возвращает ли `stack` пуст, то есть ли ваш размер стека равен нулю. Он возвращает `true` если размер 0 в стеке возвращает `false`
 | ||
| 
 | ||
| ```cpp
 | ||
| //Empty operation in Stack 
 | ||
|  #include <iostream>       // std::cout 
 | ||
|  #include <stack>          // std::stack 
 | ||
|  
 | ||
|  int main () 
 | ||
|  { 
 | ||
|   std::stack<int> s; 
 | ||
|  
 | ||
|   s.push(1); 
 | ||
|   s.push(2); 
 | ||
|  
 | ||
|   while(s.empty() != false){ 
 | ||
|       std::cout<<s.top()<<'\n'; 
 | ||
|       s.pop(); 
 | ||
|   } 
 | ||
|  
 | ||
|   std::cout<<"Out of loop"<<'\n'; 
 | ||
|   return 0; 
 | ||
|  } 
 | ||
| ```
 | ||
| 
 | ||
| ```
 | ||
| Output: 
 | ||
|  2 
 | ||
|  1 
 | ||
|  Out of loop 
 | ||
| 
 | ||
| ``` |