2015-06-15 55 views
2

的源源不断的数据结构我有时间戳数据,其中我想始终保持最后5秒的数据在缓冲源源不断。 此外,我想提供用于提取的5秒给定的子区间的数据支持,所以像的时间戳数据

interval = buffer.extractData(startTime, endTime); 

性病什么数据结构将是最合适的呢?

1),一个新的样品推旧样品从暗示,队列将是一个很好的数据结构

2),我们必须要的任何元件的随机存取这一事实,为了得到这一事实子区间可能表明矢量是合适的。

此外,这将是展示的子区间给用户的好办法? 我的建议是使用两个迭代器?

+0

也许稍微修改的环形缓冲器(其通常与载体状数据结构在后端实施)? – twalberg

+0

如果要保留时间戳数据的* 5秒*,则不能依赖新数据推出旧数据,除非您有合成时间戳。 –

+0

@ gha.st谢谢您的评论,我意识到这一点,我的意思是推出旧数据将是一个频繁的操作。 – user695652

回答

2

除非你是在代码中的表现相当关键的部分,一个deque似乎合理。它可以增长和缩小以适应数据速率的变化,并对双端队列操作和随机访问具有合理的性能。

如果代码是性能敏感(或者,更糟糕的,顶部有实时性要求,如许多时间戳缓冲区的情况下),你需要防止内存分配尽可能多地。您可以通过使用带有预分配数组的环形缓冲区(通过unique_ptr<T[]>vector)以及在超过缓冲区大小时或者(为组队增加一个大小)丢弃元素来实现。

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

用两个迭代器或一个范围对象来表示间隔都很常见,虽然C++标准库经常偏好迭代器,但是我个人的偏好是对于范围对象,因为它们(在我看来)有更好的可用性。