队列的限制大小 在 C++
我注意到类似问题的线索: Limit size of Queuesuper.***()
这样的 java 或像 base.***()
这样的 .net 将不起作用。 我一直试图从队列类继承,但结果是徒劳的。
我想做的事: 指定队列的大小,队列满时自动出队。 具体来说:如果我的队列的最大大小是2,当我推送第3个项目时,第1个项目将在推送新项目之前自动弹出。
如何实现这样的队列呢?
谢谢。
I notice the thread of similar question: Limit size of Queue<T> in .NET?
That's exactly what I want to do, but I am not using .net but GNU C++. I have no reference to the base class in GNU C++, so java like super.***()
or .net like base.***()
will not work. I have been trying to inherit from queue class but it turns out in vain.
What I want to do:
specify the size of the queue, and automatically dequeue when the queue is full. To be specific: if the maximum size of my queue is 2, when I push the 3rd item, the 1st item will be automatically popped out before pushing the new item.
How to implement such a queue?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
创建一个封装队列的新类,并在新类中强制执行大小限制。
Make a new class that encapsulates the queue and enforce a size limit in the new class.
我知道你说的是“自动”,但是,为了简单起见:将 Enqueue() 封装在本地函数中(不,不是干净的 OO,但它可以工作):
I know you said "automatic", but, to keep things simple: Encapsulate just the
Enqueue()
ing in a local function (no, not clean OO, but it works):听起来 boost::circuclar_buffer 做了什么您正在寻找:
It sounds like boost::circuclar_buffer does what you're looking for:
假设
Queue
您的意思是std::queue
:队列只是在编译时传递的某些底层容器的适配器。 您可以使用已经可以实现您想要的功能的容器。 如果您能找到一个支持std::queue
所需操作的循环缓冲区,那么最合适的似乎是循环缓冲区(我认为这是push_back()
,pop_front()
和size()
,但我还没有检查)。Assuming that by
Queue<T>
you meanstd::queue<T>
: A queue is just an adapter for some underlying container that's passed at compile-time. You could use a container that already does what you want. The best fit seems to be a circular buffer, if you can find one that supports the operations necessary forstd::queue
(I think that'spush_back()
,pop_front()
, andsize()
, but I haven't checked).