我有以下定義:返回堆棧中的值 - C++
Stack<ASTNode*>* data;
的類被定義,如果我做data->push()
或的方式,我直接推到堆棧或彈出堆棧。爲了獲得堆棧頂部的節點,我會做data->peek()
。出於測試目的,我想打印出來的頂級節點在堆棧中是這樣的:
cout << "top of stack is... " << ? << endl;
我不知道語法是什麼,或者如何取消引用此。
在此先感謝, 斯托伊奇
我有以下定義:返回堆棧中的值 - C++
Stack<ASTNode*>* data;
的類被定義,如果我做data->push()
或的方式,我直接推到堆棧或彈出堆棧。爲了獲得堆棧頂部的節點,我會做data->peek()
。出於測試目的,我想打印出來的頂級節點在堆棧中是這樣的:
cout << "top of stack is... " << ? << endl;
我不知道語法是什麼,或者如何取消引用此。
在此先感謝, 斯托伊奇
這取決於你有多少信息需要。如果你需要的是在堆棧頂部的對象的地址(可能是足夠的調試,取決於你在做什麼,我猜)的答案很簡單:
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;
至少如果我正確地閱讀他的代碼,那應該打印出一個指針...... – 2009-10-15 17:20:12
現在是編輯;自從我回答以來,ASTNode *被添加到了問題中。 – 2009-10-15 17:23:11
假設你ASTNode類重載了操作< <,它看起來像你需要:
cout << "top of stack: " << *(data->peek()) << endl;
你要找的語法應該是這樣的:
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;
}
你知道C++有一個堆棧類,對吧? – jalf 2009-10-15 17:32:00
@jalf猜測他被禁止用於任何一個學校任務,想要推出自己的學習,或被告知他不能用它進行求職面試代碼測試。 – 2009-10-15 17:44:53