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>>
。
鉴于下面的队列实现,我想知道是否可以在从队列中弹出后访问 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>>
。