gpt4 book ai didi

c++ - 如何设计一个固定TIME长度的循环缓冲区?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:33:04 24 4
gpt4 key购买 nike

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

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

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

这样设计的问题是,我必须为每个点构造一个新实例,这似乎是在浪费时间(这是一个使用非常频繁的对象)

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

谢谢!

最佳答案

列表或双端队列都适用于环形缓冲区。如果您的对象可以简单地复制并且很小,您可以只使用双端队列并且可能不必担心内存实例。如果你有更大的数据,你可以使用列表和自定义对象池(这样旧的未使用的对象将被重新用于 future 的添加)。

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

关于c++ - 如何设计一个固定TIME长度的循环缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10674242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com