我在我的堆栈上有这个反向方法,它将堆栈内的元素反转为tmpStack。我想知道如何将tmpStack分配给我的原始堆栈。我没有找到将原始堆栈分配给该值的方法,因此当我使用print时它可以显示,而不仅仅是打印tmpStack。我的问题出在最后几行。
template<class T>
void stack<T>::reverse(){
T item;
stack<T> tmpStack;
while (empty() == false)
{
item = stack<T>::pop();
tmpStack.push(item);
}
stack<T> = tmpStack;
}
答案 0 :(得分:0)
假设您的operator=
工作正常:
*this = tmpStack;
编辑:
正如托比暗示的那样:从C ++ 11开始,更好的方法是
*this = std::move(tmpStack);
区别:在您的具体情况下,没有,因为您没有提供移动赋值运算符。但是如果你这样做,那么后者就会被调用。
Stack& operator=(Stack&& other)
{
// You do not copy the data any more here, but SWAP!
// Swapping assures that, if *this has data allocated
// other will clean it up correctly for you.
}
使用这样的赋值运算符(以及适当的移动构造函数,关键字rule of five),您可以在保存数据分配和销毁的一步(移动而不是复制)时获得更高效的代码。