【问题标题】:return the value in a stack - C++返回堆栈中的值 - C++
【发布时间】:2009-10-15 17:13:50
【问题描述】:

我定义了以下内容:

Stack<ASTNode*>* data;

类的定义方式,如果我做data-&gt;push()或者data-&gt;pop(),我直接压栈或者出栈。要获得堆栈顶部的节点,我会做data-&gt;peek()。出于测试目的,我想打印出堆栈中的顶部节点,如下所示:

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

我不确定语法是什么或如何取消引用。

提前致谢, 赫里斯托

【问题讨论】:

  • 你知道 C++ 已经有一个堆栈类,对吧?
  • @jalf 猜测他被禁止将其用于学校作业,想要自己学习,或者被告知他不能将其用于工作面试代码测试。

标签: c++ stack dereference


【解决方案1】:

您要查找的语法应该是这样的:

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

为此,需要为ASTNode 定义一个operator&lt;&lt;。如果不是这种情况,您可以定义自己的,如下所示:

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

【讨论】:

    【解决方案2】:

    这取决于您需要多少信息。如果您只需要堆栈顶部的对象的地址(可能足以进行调试,取决于您在做什么我猜)答案很简单:

    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;
    

    【讨论】:

    • 是的,现在正在编辑;自从我回答以来,ASTNode* 已添加到问题中。
    【解决方案3】:

    假设你的 ASTNode 类重载了操作符

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

    【讨论】:

      猜你喜欢
      • 2014-09-06
      • 2021-01-13
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 2011-07-18
      • 2019-04-26
      • 1970-01-01
      • 2020-09-23
      相关资源
      最近更新 更多