刚开始以为要完全模拟一个出stack出来,后面才发现原来可以用原有的stack进行操作
得到栈中最小的元素,需要一个辅助栈,进入该栈的条件就是比辅助栈栈顶元素小,否则加入本身辅助栈的栈顶元素以补充位置,致使调用pop时,不会出现一个最小元素弹出后没有了次最小元素
#include<iostream>
#include<stack>
template<class T>
class StackWithMin
{
std::stack<T>m_data, m_min;
public:
void s_push(const T& _value);
void s_pop();
T& get_Min();
};
template<class T>
void StackWithMin<T>::s_push(const T& _value)
{
m_data.push(_value);
if (m_min.size() == 0 || _value < m_min.top())
m_min.push(_value);
else
m_min.push(m_min.top());
}
template<class T>
void StackWithMin<T>::s_pop()
{
if (m_data.size() <= 0 && m_min.size() <= 0)
return;
m_data.pop();
m_min.pop();
}
template<class T>
T& StackWithMin<T>::get_Min()
{
if (m_min.size() <= 0)std::exception("Invalied");
return m_min.top();
}
int main(int argc, char* argv[])
{
StackWithMin<int> B;
B.s_push(10);
B.s_push(9);
B.s_push(5);
B.s_push(15);
std::cout << B.get_Min();
std::cin.get();
return 0;
}