【问题标题】:Declaring a stack of a struct inside the struct definition [duplicate]在结构定义中声明一个结构的堆栈[重复]
【发布时间】:2014-11-30 08:55:13
【问题描述】:

我需要在它自己的结构声明中声明一个结构的两个堆栈。我知道我可以对数组执行此操作,只要我用结构内的指针引用它(即FA *goingTo[30]; 会给我一个包含 30 个FAs 的数组)。有没有类似的方法来引用堆栈?

typedef struct FA
{
    std::stack<FA> goingTo;
    std::stack<FA> comingFrom;
};

【问题讨论】:

  • 你的意思是std::stack&lt;FA&gt; going_from_or_to[2](或者更好的std::array&lt;std::stack&lt;FA&gt;&gt; going_from_or_to),然后使用指针、迭代器或索引来遍历它们?不清楚你在问什么。
  • 或者等等,你的意思是有没有办法迭代inside一个堆栈?在这种情况下,否:std::stack 仅提供对 top 元素的访问。如果您想访问其他元素,只需直接使用std::vectorstd::dequestd::stack 几乎一文不值。
  • 不允许结构包含自己的标准容器。你必须做一些不同的事情。 Boost 有一些容器可以做到这一点。
  • 第一个选项是我想要做的。我为混乱道歉。我需要在 FA 的定义内执行此操作,因为我将有许多不同的 FA 前往每个 FA 并来自每个 FA。好的,我想我需要查找其他选项,谢谢。

标签: c++ struct stack nfa


【解决方案1】:

您在结构中定义的堆栈对象本身将包含(可能)结构的多个实例,每个实例都包含自己的堆栈,这些堆栈又包含更多的结构。所以如果你想一想,这是一个无限的遏制链。您可以修改定义(和用法)以包含指向 FA* 的指针堆栈。这样就可以解决问题了。

typedef struct FA {
   std::stack<FA*> goingTo;
   std::stack<FA*> comingFrom;
};

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 2018-06-13
    • 2014-04-17
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2018-09-09
    相关资源
    最近更新 更多