1 #include<iostream>
2 #include<vector>
3 #include<string>
4
5 using namespace std;
6
7 template <typename T>
8 class Stack
9 {
10 public:
11 Stack(){}
12 ~Stack(){}
13 bool empty()const;
14 void push(T value);
15 T top()const;
16 void pop();
17 int size()const;
18 void printStack()const;
19 private:
20 vector<T> ve;
21 };
22
23 template <typename T>
24 bool Stack<T>::empty()const
25 {
26 return ve.empty();
27 }
28
29 template <typename T>
30 void Stack<T>::push(T value)
31 {
32 ve.push_back(value);
33 }
34
35 template <typename T>
36 T Stack<T>::top()const
37 {
38 return ve.back();
39 }
40
41 template <typename T>
42 void Stack<T>::pop()
43 {
44 ve.pop_back();
45 }
46
47 template <typename T>
48 int Stack<T>::size()const
49 {
50 return ve.size();
51 }
52
53 template <typename T>
54 void Stack<T>::printStack()const
55 {
56 for (auto t : ve)
57 cout << t << " ";
58 cout << endl;
59 }
60
61 int main()
62 {
63 Stack<int> stk;
64 for (int i = 0; i < 10; i++)
65 stk.push(i);
66 stk.pop();
67 stk.printStack();
68
69 Stack<string> stringStack;
70 stringStack.push("Chicago");
71 stringStack.push("Denver");
72 stringStack.push("London");
73 stringStack.push("California");
74
75 cout << stringStack.top() << endl;
76 cout << stringStack.size() << endl;
77 stringStack.printStack();
78 return 0;
79 }