鉴于下面的队列实现如下,我想知道是否可以访问该类'成员从队列中弹出后。基本上我应该跟踪一个项目在队列中保留多长时间,直到它被弹出为止,我有点迷失在如何做到这一点。时间表示为特定循环的迭代次数(下面未显示)
#include <queue>
class Plane
{
public:
Plane() {}
};
std::queue<Plane> landing;
int main()
{
landing.push(Plane());
}
答案 0 :(得分:0)
您可能希望在将项目放入队列之前将其放在包装类中。让包装类包含一个计数器,当您在队列中输入项目时将其设置为零,并在循环的每次迭代时递增。当你弹出它时,计数器会告诉你它的年龄。
包装类看起来像这样:
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<Plane>
而不是queue<timed<plane>>
。每个计时器勾选,您将遍历队列并在每个项目上调用tick
。哦,但是既然你想要访问所有项目,而不仅仅是推送和弹出,你可能想要使用std::deque<timed<plane>>
代替。