面试金典--3.3

 1 #include <iostream>
 2 #include <queue>
 3 #include <climits>
 4 #include <algorithm>
 5 #include <memory.h>
 6 #include <stdio.h>
 7 #include <ostream>
 8 #include <vector>
 9 #include <list>
10 #include <cmath>
11 #include <string>
12 #include <stdexcept>
13 #include <stack>
14 using namespace std;
15 
16 template<typename T>
17 class SetOfStacks
18 {
19     vector<stack<T> > stacks;
20     int stackSize;
21 public:
22     SetOfStacks(int paramStackSize):stackSize(paramStackSize)
23     {
24 
25     }
26     void push(const T&elem)
27     {
28         if(stacks.size() == 0)
29         {
30             stack<T> tmp;
31             tmp.push(elem);
32             stacks.push_back(tmp);
33             return;
34         }
35         if(stacks[stacks.size()-1].size() == stackSize)
36         {
37             stack<T> tmp;
38             tmp.push(elem);
39             stacks.push_back(tmp);
40         }
41         else
42         {
43             stacks[stacks.size()-1].push(elem);
44         }
45     }
46     T pop()
47     {
48         if(stacks.size() == 0)
49             throw std::out_of_range("stacks is empty");
50         T val = stacks[stacks.size()-1].top();
51         stacks[stacks.size()-1].pop();
52         if(stacks[stacks.size()-1].size() = 0)
53             stacks.pop_back();
54         return val;
55     }
56 };
57 
58 int main()
59 {
60     SetOfStacks<int> s(1);
61     s.push(1);
62     s.push(2);
63 
64     return 0;
65 }