题目:用两个栈实现队列的基本功能。
实现:一个栈用于接受输入,一个用于输出,仅当输出栈空时,将输入栈中的数据一次性压入输出栈。以下实现中,该动作在pop和front中进行。
C++实现如下:
template <typename T>
class MyQueue
{
public:
void Push(const T& t)
{
m_in.push(t);
}
void Pop()
{
if (!m_out.empty())
{
m_out.pop();
return;
}
while (!m_in.empty())
{
m_out.push(m_in.top());
m_in.pop();
}
if (m_out.empty())
{
throw std::out_of_range("MyQueue is empty.");
}
m_out.pop();
}
T Front()
{
if (!m_out.empty())
{
return m_out.top();
}
while(!m_in.empty())
{
m_out.push(m_in.top());
m_in.pop();
}
if(m_out.empty())
{
throw std::out_of_range("MyQueue is empty.");
}
return m_out.top();
}
bool Empty() const
{
return (m_in.empty() && m_out.empty());
}
size_t Size() const
{
return m_in.size() + m_out.size();
}
private:
stack<T> m_in;
stack<T> m_out;
};