В стеке реализована функция Queue Peek

Поэтому я искал этот вопрос, но все еще не могу понять, что происходит.

Очередь реализуется с использованием двух стеков, что я понимаю и все, но когда дело доходит до 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 (), разве это не рекурсивный вызов функции? Что происходит в коде, когда я делаю это и почему это работает?

0

Решение

Здесь нет рекурсивного вызова, потому что outStack должен быть экземпляром некоторого класса, который реализует стек, в то время как somethingsomething это класс, который реализует Очередь используя два стека. Они не могут быть одним и тем же классом, и поэтому два метода, называемых peek (), ссылаются на разные методы разных классов, хотя они имеют одно и то же имя.

0

Другие решения

Peek обычно означает просмотр следующего символа, т.е. он возвращает следующий символ во входной последовательности. Имейте в виду, что если установлен какой-либо внутренний флаг, он вернет EOF (конец файла). Рассмотрим следующий пример, чтобы понять функцию просмотра.

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

Таким образом, в вашем случае potato вернет следующий символ из стека, вы должны проверить его по флагу и сохранить в переменной, а затем распечатать.

0

По вопросам рекламы [email protected]