Работа со стеком(STL)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stack>
#include <vector>
#include <iostream>
// Для простоты примера стек содержит целочисленные переменные
// А в качестве промежуточного буфера используется не файл, а vector
int main()
{
std::stack<int> s;
// Заполнение стека числами от 0 до 9
for(int i = 0; i < 10; ++i)
s.push(i);
// Допустим в стеке должны остаться все числа, кроме 5
// Соответственно необходимо удалить элемент со значением 5
std::vector<int> v;
while(!s.empty())
{
if(s.top() != 5) // Это ключевой момент, в стек помещаются
v.push_back(s.top()); // все элементы не равные 5
s.pop();
}
// Теперь стек пустой, а вектор содержит все значения стека, кроме 5.
// При этом первый элемент вектора содержит число 9.
// Чтобы сохранить исходную последовательность в стеке
// необходимо помещать элементы в стек, начиная с конца вектора.
for(int i = v.size() - 1; i >= 0; --i)
s.push(v[i]);
// Для проверки выведем стек на экран
while(!s.empty()) {
std::cout << s.top() << ' ';
s.pop();
}
return 0;
}