【问题标题】:Stack implemented Queue Peek functionStack实现的Queue Peek功能
【发布时间】:2016-01-06 21:13:57
【问题描述】:

所以我环顾四周寻找这个问题,但仍然无法理解发生了什么。

一个队列是使用两个堆栈实现的,我完全理解,但是当涉及到peek 函数时,我就是不明白它是如何工作的。例如,

template<class T>
T somethingsomething<T>::peek()
{
    T potato;

    if(outStack.isEmpty() == false)
    {
        potato = outStack.peek();
        return potato;
    }
    else
    {
        /* stuff stuff stuff*/
    }
}

搞砸之后,我发现这个实现有效,但不知道为什么。当我执行 outStack.peek() 时,这不是对函数的递归调用吗?当我这样做时,代码中发生了什么以及为什么会起作用?

【问题讨论】:

    标签: c++ stack queue peek


    【解决方案1】:

    这里没有递归调用,因为outStack必须是实现Stack的某个类的实例,而somethingsomething是实现Queue 使用两个堆栈。它们不能是同一个类,因此 peek() 这两个方法虽然名称相同,但引用了不同类的不同方法。

    【讨论】:

      【解决方案2】:

      Peek 通常意味着查看下一个字符,即它返回输入序列中的下一个字符。请记住,如果设置了任何内部标志,那么它将返回 EOF(文件结束)。请考虑以下示例以了解 peek 功能。

      #include <iostream>
      using namespace std;
      int main(){
      
      cout<<"Enter a number: ";
      
      
      int n;
      cin>>ws;
      int c = cin.peek();
      
      if(c == EOF){   //checking for end of file
          return 1;
      }
      if(isdigit(c)){
          cin>>n;
          cout<<"you entered: "<<n<<endl;
      }
      
      return 0;
      }
      

      因此,在您的情况下,土豆将从堆栈中返回下一个字符,您必须根据标志检查它并将其存储在变量中,然后打印它。

      【讨论】:

        猜你喜欢
        • 2019-01-23
        • 1970-01-01
        • 2017-05-10
        • 2011-03-01
        • 1970-01-01
        • 2011-06-14
        • 2015-06-16
        • 1970-01-01
        相关资源
        最近更新 更多