繁体   English   中英

如何设计固定时间长度的循环缓冲区?

[英]how to design a fixed TIME length circular buffer?

boost :: circular_buffer不能提供固定长度的缓冲区,例如,大小为5。

想象一下我的时间戳中包含实时数据流。 我想在最近5分钟内保留所有元素的缓冲区。

天真地,我可以构建std :: list的包装,每当一个新的数据点D出现时,我push_back(D),然后对所有5分钟之前的数据点pop_front()进行while循环。

这种设计的问题在于,我必须为每个点构造一个新实例,这似乎是在浪费时间(这是一个使用率很高的对象)

这里有没有人有更优雅的解决方案?

谢谢!

列表或双端队列都适合于环形缓冲区。 如果对象是可复制且很小的对象,则可以使用双端队列,而不必担心内存实例。 如果您有较大的数据,则可以使用列表和自定义对象池(这样,旧的未使用对象将被重复使用,以供将来添加)。

如果您不喜欢std集合对象池的语义(在C ++ 11之前很糟糕,现在还不确定),那么您可以简单地将指针存储在双端队列中并管理自己的内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM