boost :: circular_buffer can提供固定长度的缓冲区,例如,大小为5。
我有实时数据流进入时间戳的映像。我想在最后5分钟内保留所有元素的缓冲区。
天真地,我可以构建一个std :: list的包装器,每当有新的数据点D进入时,我push_back(D),然后执行一个while循环到pop_front()所有超过5分钟的数据点。
这种设计的问题在于,我必须为每个点构建一个新实例,这似乎是浪费时间(这是一个非常频繁使用的对象)
这里有人有更优雅的解决方案吗?
谢谢!
答案 0 :(得分:1)
列表或双端队列都适用于环形缓冲区。如果您的对象可以轻松复制并且很小,您可以使用deque并且可能不担心内存实例。如果您有更大的数据,则可以使用列表和自定义对象池(以便将来重新使用旧的不可用对象)。
如果你不喜欢std集合对象池语义(在C ++ 11之前很糟糕,我现在不确定),那么你可以简单地在deque中存储指针并管理你自己的内存。