面试题12 - 包含 min 函数的栈 【栈】
来源:互联网 发布:三钻的淘宝店铺估价 编辑:程序博客网 时间:2024/05/17 07:40
#include <iostream>#include <cstdio>#include <stack>#include <queue>#include <deque> // 支持下标访问#include <algorithm>using namespace std;template<typename T> class StackWithMin {public : StackWithMin() {} virtual ~StackWithMin() {} const size_t size() const; void pop(); void push(const T& value); T top() const; T min();private : deque<T> m_data; deque<T> m_min;};template<typename T> const size_t StackWithMin<T>::size() const { return m_data.size();}template<typename T> void StackWithMin<T>::pop() { assert(!m_data.empty() && !m_min.empty()); m_data.pop_front(); m_min.pop_front();}template<typename T> void StackWithMin<T>::push(const T& value) { m_data.push_front(value); if(m_min.empty() || value < m_min[0]) { m_min.push_front(value); } else { m_min.push_front(m_min[0]); }}template<typename T> T StackWithMin<T>::top() const { assert(!m_data.empty() && !m_min.empty()); return m_data[0];}template<typename T> T StackWithMin<T>::min() { assert(!m_data.empty() && !m_min.empty()); return m_min[0];}int main() { return 0;}