面试题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;}