2009-10-15 6 views
1

Je donne les résultats suivants définis:retourner la valeur dans une pile - C++

Stack<ASTNode*>* data; 

La façon dont la classe est définie, si je fais data->push() ou data->pop(), je pousse directement sur la pile ou pop de la pile. Pour obtenir le nœud en haut de la pile, je ferais data->peek(). Pour des fins de test, je voudrais imprimer le nœud supérieur dans la pile comme ceci:

cout << "top of stack is... " << ? << endl; 

Je ne suis pas sûr de ce que la syntaxe est ou comment déréférencer cela.

merci à l'avance, Hristo

+0

Vous savez que C++ possède déjà une classe de pile, n'est-ce pas? – jalf

+0

@jalf Devinant qu'il a été interdit de l'utiliser pour une tâche scolaire, veut rouler le sien pour apprendre, ou a été dit qu'il ne pouvait pas l'utiliser pour un test de code d'entrevue d'emploi. –

Répondre

7

Cela dépend de la quantité d'informations dont vous avez besoin. Si vous avez besoin est l'adresse de l'objet sur le dessus de la pile (peut-être assez pour le débogage, dépend de ce que vous faites, je suppose) la réponse est aussi simple que:

cout << "top of stack is..." << data->peek() << endl; 

Si vous avez besoin elle-même objet, il suffit d'utiliser:

cout << "top of stack is..." << *(data->peek()) << endl; 

ou

cout << "top of stack is..." << data->peek()->someIdentifyingMethod() << endl; 
+1

Au moins si je lis correctement son code, cela devrait imprimer un pointeur ... –

+1

Ouais éditer maintenant; l'ASTNode * a été ajouté à la question depuis que j'ai répondu. –

2

en supposant que votre classe ASTNode a surchargé l'opérateur < <, il semble que vous avez besoin:

cout << "top of stack: " << *(data->peek()) << endl; 
7

La syntaxe que vous cherchez devrait être quelque chose comme ceci:

cout << "top of stack is... " << *(data->peek()) << endl; 

Pour que cela fonctionne, il doit y avoir un operator<< défini pour ASTNode. Si ce n'est pas le cas, vous pouvez définir le vôtre qui ressemblerait à ceci:

std::ostream& operator<<(std::ostream &strm, const ASTNode &node) { 
    return strm << node.name << ": " << node.value; 
} 
Questions connexes