稳定的带时间戳数据流的数据结构

时间:2015-06-15 19:20:13

标签: c++ data-structures std

我有稳定的时间戳数据流,我希望始终将最后5秒的数据保存在缓冲区中。 此外,我想提供支持提取5秒的给定子区间的数据,所以像

interval = buffer.extractData(startTime, endTime);

什么std数据结构最适合这个?

1)新样本推出旧样本的事实提示队列将是一个良好的数据结构

2)为了获得子区间,我们必须随机访问任何元素这一事实可能表明向量是合适的。

此外,将子区间呈现给用户的好方法是什么? 我的建议是使用两个迭代器?

1 个答案:

答案 0 :(得分:2)

除非您处于代码中性能相当重要的部分,否则deque似乎是合理的。它可以增长和缩小以适应数据速率的变化,并且具有双端队列操作和随机访问的合理性能。

如果代码对性能敏感(或者更糟糕的是,实时需求在顶部,就像许多带时间戳的缓冲区一样),则需要尽可能地防止内存分配。您可以通过使用带有预分配数组的环形缓冲区(通过unique_ptr<T[]>vector)来执行此操作,并在超出缓冲区大小时删除元素,或者(为团队选择一个)它的大小。

通过永不减小尺寸,你的环形缓冲区可能会浪费一些内存,但请记住,在大多数情况下,内存相当丰富。

通过两个迭代器或一个范围对象来表示间隔是常见的,虽然C ++标准库通常更喜欢迭代器,但我个人偏好的是范围对象,因为它们(在我看来)的可用性稍微好一些。