反向堆栈元素C ++

时间:2017-04-11 08:25:10

标签: c++ stack

我在我的堆栈上有这个反向方法,它将堆栈内的元素反转为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;


}

1 个答案:

答案 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),您可以在保存数据分配和销毁的一步(移动而不是复制)时获得更高效的代码。