如何设计固定时间长度的循环缓冲区
how to design a fixed TIME length circular buffer?
boost::circular_buffer cann 提供了一个固定长度的缓冲区,例如大小为 5。
成像我有带有时间戳的实时数据流。我想保留过去 5 分钟内所有 elemens 的缓冲区。
天真地,我可以构建一个 std::list 的包装器,每次有一个新的数据点 D 进入时,我都会push_back(D(,然后做一个 while 循环来pop_front(( 所有超过 5 分钟的数据点。
这种设计的问题在于,我必须为每个点构建一个新实例,这似乎是浪费时间(这是一个使用量很大的对象(
这里有人有更优雅的解决方案吗?
谢谢!
列表或双端都适用于环形缓冲区。如果你的对象是微不足道的可复制的,而且很小,你可以只使用deque,可能不用担心内存实例。 如果您有更大的数据,则可以使用列表和自定义对象池(以便将来添加旧的未使用对象
(。如果您不喜欢 std 集合对象池语义(在 C++11 之前很糟糕,我现在不确定(,那么您可以简单地将指针存储在 deque 中并管理您自己的内存。
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- 有没有办法重复循环循环?
- Qt有循环缓冲吗?
- 虽然第三次循环循环,尽管在我眼中没有满足它的条件,因此打印了一个空字符串
- 避免以不同的迭代剂的循环循环避免几乎相同的代码重复
- 循环循环保存到数组,然后访问;
- 未定义的行为怪癖:在缓冲区外读取导致循环永远不会终止
- 对于循环循环仅 3 次
- 处理媒体循环循环循环通过向量中的对象的各个方面
- 将C转换为循环循环循环
- 关于如何正确循环循环并找到最小的价值,需要基本C 的帮助
- 我如何循环循环switch语句检查重新检查char?(C )
- 在嵌套循环/循环不变量中检查一次
- 只有在充满for循环的情况下才能进行开放缓冲播放
- 调用linearize后奇怪的boost循环缓冲行为