模拟实现栈的push/pop/min功能
#include<iostream>
#include<stack>
#include <cstdlib>
using namespace std;
template<class T>
class MyStack
{
public:
MyStack()
{}
~MyStack()
{}
public:
void Push(const T& x)
{
s1.push(x);
if (s2.empty()|| x<=s2.top())
{
s2.push(x);
}
}
void Pop()
{
if (s1.top()==s2.top())
{
s1.pop();
s2.pop();
}
else
{
s1.pop();
}
}
void Min()
{
if (!s2.empty())
{
cout<<s2.top()<<endl;
}
}
void Print()
{
while(!s1.empty())
{
cout<<s1.top()<<" ";
s1.pop();
}
cout<<endl;
while (!s2.empty())
{
cout<<s2.top()<<" ";
s2.pop();
}
cout<<endl;
}
private:
stack<T> s1;
stack<T> s2;
};
void test()
{
MyStack<int> s;
s.Push(1);
s.Push(2);
s.Push(1);
s.Push(2);
s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
//s.Print();
s.Pop();
s.Pop();
//s.Print();
s.Min();
s.Print();
}