#include<stack>
template<typename T>
class CQueue
{
public:
CQueue(void);
~Queue(void);
void appendTail(const T&node);//插入节点
T deletHead();//删除头节点
private:
std::stack<T> stack1;
std::stack<T> stack2;
};
template<typename T> void CQueue<T>::appendTail(const T&node)
{
stack1.push(node);
}
template<typename T>T CQueue<T>::deletHead()
{
if (stack2.empty())
{
while(!stack1.empty())
{
T& data = stack1.top();
stack1.pop();
stack2.push(data);
}
if (!stack2.empty())
{
T head = stack2.top()
stack2.pop();
}
else
{
throw new exception("queue is empty");
}
return head
}
这是剑指offer上的一个关于用两个栈实现一个队列的代码。T& data = stack1.top();中,为什么打他要是引用类型,是和参数使用引用类型一样传址拷贝么?
解决方案
20
stack::top的重载方法有两个,都是引用类型,目的是减少内存拷贝。当然不使用引用也可以,无非是多进行了一次对象拷贝。
reference top( );
const_reference top( ) const;
reference top( );
const_reference top( ) const;
20
减小拷贝对象带来的开销
是的,相似参数中的引用,top函数返回值也是引用类型,可以看top函数的声明
是的,相似参数中的引用,top函数返回值也是引用类型,可以看top函数的声明
10
T& top(void);
const T& top(void) const;
一个返回左值,可以修改
一个返回右值,不可以修改。
const T& top(void) const;
一个返回左值,可以修改
一个返回右值,不可以修改。