class 个对象的队列

Queue of class objects

鉴于下面的队列实现,我想知道是否可以在从队列中弹出后访问 class' 成员。基本上我应该跟踪一个项目在队列中保留了多长时间,直到它被弹出,我有点迷失了如何做到这一点。时间表示为特定循环的迭代次数(下面未显示)

#include <queue>

class Plane
{
   public:
     Plane() {}
};

std::queue<Plane> landing;

int main()
{
   landing.push(Plane());
}

您可能希望在将项目放入队列之前将其放入包装器 class 中。让包装器 class 包含一个计数器,当您在队列中输入项目时将其设置为零,并在循环的每次迭代中递增。当你弹出它时,计数器会告诉你它的年龄。

包装器 class 看起来像这样:

template <class T>
class timed { 
    T item;
    unsigned timer;
public:
    timed(T const &t) : item(t), timer(0) {}
    void tick() { ++ timer; }
    unsigned elapsed() { return timer; }
    operator T() { return item; }
};

那么您将创建一个 queue<timed<plane>>,而不是 queue<Plane>。每个计时器滴答声,您将遍历队列并在每个项目上调用 tick。哦,但是既然你想访问所有项目,而不仅仅是 push 和 pop,你可能想改用 std::deque<timed<plane>>