#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;
一个返回左值,可以修改
一个返回右值,不可以修改。