如何制作类对象的双端队列?

时间:2016-06-18 13:53:07

标签: c++ c++11 deque

我有一个deque个结构(每个结构包含一个int id和一个std::chrono::time_point<std::chrono::system_clock>时间戳记:在一定的超时后,从deque中删除了已超时的结构

我想到了一种不同的方法:不是让一个循环遍历deque的线程来检查其中每个结构的超时,我可以将对象类放在deque中:当构造函数时调用此类,并将对象推入deque,调用此类的方法;当对象从睡眠状态恢复时,此方法将使对象休眠std::this_thread::sleep_for(std::chrono::milliseconds(/*#define TIMETOUT*/));,它会向等待“condition_variable”的线程发送信号。

我读了一个关于类对象队列的question(这让我发现了包装类),但我不明白一些事情:当我从deque中删除时,会返回什么?参考?对象本身?我需要删除该对象,因为我必须将其插入另一个deque。 如果真的需要包装器,我如何为我的目的正确创建一个类?

1 个答案:

答案 0 :(得分:1)

首先,任何类型的睡眠功能都不会帮助你:它会冻结整个线程,而不是一个对象。如果您不知道线程是什么以及如何使用它们,那么您的程序是单线程的,当您调用sleep函数时整个程序将冻结。

然后,当您从双端队列中删除某些内容时,deque::erase()会将迭代器返回到队列中的下一个对象。当您在循环中遍历队列并且想要删除某些内容时,这非常有用。

如果要在某处复制对象,则需要先执行此操作。删除后,无法复制。

最后,关于包装类:我不知道为什么你需要在这里使用它们。在从第一个删除if之前,您可以手动将对象添加到其他队列。