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  | |||
|  | 
 | |||
|  | ``` |