【问题标题】:How do I copy values from one stack to another?如何将值从一个堆栈复制到另一个堆栈?
【发布时间】:2022-10-17 07:37:22
【问题描述】:

从stack1弹出值然后尝试将这些值推回stack1后,我被卡住了,然后按顺序推回stack2。我不确定是否需要另一个循环来使其成为嵌套循环,或者我是否应该切换到 for 循环,因为它们正在计算循环。

void copyStack(stack<int>& stack1, stack<int>& stack2)
{
   int size = stack1.size();
   while(size > 0)
   {
 
      stack2.push(stack1.top());
      stack1.pop();
      stack1.push(stack2.top());
      --size;
      
   }
   

}

例子:

堆栈 1:4 3 2 1

堆栈2:(空)

(运行功能后...)

堆栈 1:(空)

堆栈 2:4 3 2 1

【问题讨论】:

  • 一些值还是所有值?如果是后者,std::stack 有一个复制构造函数。
  • @user4581301 所有的值,我只是想实现我自己的复制功能,我知道堆栈有一个 swap() 功能。

标签: c++ data-structures stack


【解决方案1】:

如果您从一个堆栈中弹出值并将它们推送到另一个堆栈,它们将与原始顺序相反。如果您希望它们按原始顺序排列,则需要一个中间堆栈。从stack1 弹出所有值,然后推送到stackTemp,然后从stackTempstack2 执行相同操作。

【讨论】:

  • 谢谢,但我已经用一个额外的堆栈解决了它,我正在尝试在没有中间堆栈的情况下实现该功能。
  • @Jasmine 我认为如果不使用中间的第三个容器,这是不可能的。至少不使用受保护的c 成员。但是,如果您需要使用该成员,那么您肯定使用了错误的容器。
  • @Jasmine您可以使用递归,从而隐式使用调用堆栈作为中间堆栈。但这将是一个更糟糕的解决方案。
【解决方案2】:

我有点困惑,你为什么不直接使用这个:

void copyStack(stack<int>& stack1, stack<int>& stack2) {
    stack2 = stack1;
}

它是 C++ ;)

或者,如果你想交换这两个堆栈的元素,而不是复制,你可以使用:

stack1.swap(stack2);

编辑:如果您想自己动手并寻找有趣的解决方案,可以尝试以下链接: Clone a stack without extra space

Clone a stack without using extra space | Set 2

【讨论】:

    【解决方案3】:
    void copy(Stack<T> source)
    {
        Stack<T> temp1;
        Stack<T> temp2;
    
        while (!source.isEmpty())
        {
            temp1.push(source.peek());
            temp2.push(source.peek());
            source.pop();
        }
        while (!temp1.isEmpty())
        {
            push(temp1.peek());
            temp1.pop();
        }
        while (!temp2.isEmpty())
        {
            source.push(temp2.peek());
            temp2.pop();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-08
      • 2013-12-26
      • 1970-01-01
      • 2023-03-03
      • 2012-02-15
      • 2020-04-03
      • 2018-08-29
      • 2020-07-27
      相关资源
      最近更新 更多