2015-10-09 3 views
0

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

0

Peek обычно означает просмотр следующего символа, т.е. он возвращает следующий символ во входной последовательности. Имейте в виду, что если установлен какой-либо внутренний флаг, он вернет EOF (конец файла). Рассмотрим следующий пример: t понять функцию 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; 
} 

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