Code Bye

问一下这个变量为什么要用引用类型

#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;

20

减小拷贝对象带来的开销
是的,相似参数中的引用,top函数返回值也是引用类型,可以看top函数的声明

10

T& top(void);
const T& top(void) const;
一个返回左值,可以修改
一个返回右值,不可以修改。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明问一下这个变量为什么要用引用类型