2009-10-15 53 views
1

我有以下定義:返回堆棧中的值 - C++

Stack<ASTNode*>* data; 

的類被定義,如果我做data->push()或​​的方式,我直接推到堆棧或彈出堆棧。爲了獲得堆棧頂部的節點,我會做data->peek()。出於測試目的,我想打印出來的頂級節點在堆棧中是這樣的:

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

我不知道語法是什麼,或者如何取消引用此。

在此先感謝, 斯托伊奇

+0

你知道C++有一個堆棧類,對吧? – jalf 2009-10-15 17:32:00

+0

@jalf猜測他被禁止用於任何一個學校任務,想要推出自己的學習,或被告知他不能用它進行求職面試代碼測試。 – 2009-10-15 17:44:53

回答

7

這取決於你有多少信息需要。如果你需要的是在堆棧頂部的對象的地址(可能是足夠的調試,取決於你在做什麼,我猜)的答案很簡單:

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

如果您需要對象本身,只需使用:

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

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

至少如果我正確地閱讀他的代碼,那應該打印出一個指針...... – 2009-10-15 17:20:12

+1

現在是編輯;自從我回答以來,ASTNode *被添加到了問題中。 – 2009-10-15 17:23:11

2

假設你ASTNode類重載了操作< <,它看起來像你需要:

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

你要找的語法應該是這樣的:

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

對於這項工作,需要有對ASTNode定義的operator<<。如果不是這種情況,你可以定義你自己的,看起來像這樣:

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