【问题标题】:Adding Items to a Queue将项目添加到队列
【发布时间】:2015-02-26 00:06:05
【问题描述】:

我应该模拟一个跑道机场在给定时间段内的运行情况。我所做的是创建队列以分别准备起飞和降落的飞机。我创建了一个类来表示飞机,因为我需要监控它在队列中保留多长时间。因此,要向任一队列添加“平面”,需要测试一个条件(一个基于随机性返回真/假的函数),如果为真,则添加一个平面。我的问题是有没有办法可以声明一个新的“飞机”然后将其添加到队列中?例如,假设“landing”是一个已经声明的队列:

if(condition)
    create plane
    landing.push(created plane)

【问题讨论】:

  • 您的队列持有的实际数据类型是什么?是Plane,Plane*,...?

标签: c++ class queue


【解决方案1】:

如果您将队列视为特殊数组,则对您来说可能更容易。 您将对象推送到队列中,例如您的情况下的 BigInt 或平面对象(取决于您实现队列的方式)。 您可以在括号中调用 Plane 的构造函数,也可以单独创建一个平面对象并将其推送到队列中。 所以最直观:

landing.push(Plane(a,b...));

或:

平面 p = new Plane(a,b...); 登陆.push(p);

如果您编写了自己的队列类,那么这实际上取决于您如何实现 push 方法。您是简单地引用一个平面对象并为其创建一个节点,还是在 push 方法中创建平面对象?

【讨论】:

    【解决方案2】:

    从你的问题看来,你需要做的就是:

    if (condition)
        landing.push(Plane(/*argumnts, if any */));
    

    我假设您的容器会创建副本。

    例子:

    #include <queue>
    
    class Plane
    {
       public:
         Plane() {}
    };
    
    std::queue<Plane> landing;
    
    int main()
    {
       landing.push(Plane());
    }
    

    实时示例:http://ideone.com/TyTtlc

    【讨论】:

    • 我认为它不会创建副本,我该怎么做?
    • 你需要告诉我们这个queue是什么。是std::queue吗?如果是std::queue,那么它会在调用push 时进行复制。
    • 它的 STL 队列,当我尝试你的建议时,它会在它下划线并说“不允许使用类型名称”,这是有道理的,因为如果你这样做,你实际上不是没有推送任何东西吗?跨度>
    • 再看我的例子。您正在构建一个临时的 Plane 对象。你一定忘记了括号。
    【解决方案3】:

    是吗?它不是很清楚你在问什么。 你只需运行你的构造函数或者你有什么来创建平面并将它推到队列中。

    【讨论】:

    • 我只是对你实际压入堆栈的内容有点困惑。你用什么替换星号:landing.push(*)
    • 如果我之前没有创建过对象,我该如何调用构造函数?
    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多