题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。 我写的头文件如下: #ifndef _MYSTACK_H #define _MYSTACK_H #include <iostream> #include <vector> using namespace std; template <class T> class MyStack { public: MyStack(){m_data.clear();m_minpos.clear();}; ~MyStack(){}; inline void setEmpty(){m_data.clear();m_minpos.clear();}; inline bool IsEmpty() const{return m_data.empty();}; void Push(const T data); void Pop(); const T &Top(); const T &Top() const; const T &Min() const; private: vector<T> m_data; vector<int> m_minpos; }; template <class T> void MyStack<T>::Push(const T data) { if(m_minpos.empty())m_minpos.push_back(0); else if(data>=m_data[m_minpos.back()])m_minpos.push_back(m_minpos.back()); else m_minpos.push_back(m_minpos.size()); m_data.push_back(data); } template <class T> void MyStack<T>::Pop() { m_minpos.pop_back(); m_data.pop_back(); } template <class T> const T &MyStack<T>::Top() { return m_data.back(); } template <class T> const T &MyStack<T>::Top() const { return m_data.back(); } template <class T> const T &MyStack<T>::Min() const { return m_data[m_minpos.back()]; } #endif