C ++ не может использовать функцию peek () в стеке - PullRequest
2 голосов
/ 31 марта 2012

Я пытаюсь использовать функцию peek в Visual Studio 2010 с этими библиотеками:

#include "stdafx.h"
#include <string>
#include <string.h>
#include <fstream>
#include <iostream>
#include <string.h>
#include <vector>
#include <stack>

Однако я не могу использовать функцию peek в стеке:

void dfs(){
    stack<Node> s;
    s.push(nodeArr[root]);
    nodeArr[root].setVisited();
    nodeArr[root].print();
    while(!s.empty()){
        //peek yok?!
        Node n=s.peek();        
        if(!n.below->isVisited()){
            n.below->setVisited();
            n.below->print();
            s.push(*n.below);
        }
        else{
            s.pop();
        }
    }
}

Я получаю ошибку:

Ошибка 1, ошибка C2039: «peek»: не является членом «std :: stack <_Ty>»

Что я делаю не так?

Ответы [ 4 ]

6 голосов
/ 31 марта 2012

Я думаю, что вы хотите использовать

s.top();

вместо пика.

5 голосов
/ 31 марта 2012

В std::stack.

нет функции peek.

Вы ищете top()?

void dfs(){
    stack<Node> s;
    s.push(nodeArr[root]);
    nodeArr[root].setVisited();
    nodeArr[root].print();
    while(!s.empty()){
        //peek yok?!
        Node n=s.top();   // <-- top here
        if(!n.below->isVisited()){
            n.below->setVisited();
            n.below->print();
            s.push(*n.below);
        }
        else{
            s.pop();
        }
    }
}
2 голосов
/ 31 марта 2012

В std :: stack нет функции peek. Для справки см. стек

Похоже, что вы используете функциональность, как top. Для справки сверху, посмотрите на эту ссылку .

1 голос
/ 31 марта 2012

Ваш код имеет stack, но вы действительно хотели использовать Stack. Это две разные вещи.

...