适当的数据结构,用于存储C ++中的最后n个元素

时间:2012-05-30 07:54:18

标签: c++ data-structures

我需要存储最后n个时间值,我正在使用矢量。我可以做到这一点并且有效,但我的问题是,从长远来看,向量会填满,我可能会用尽内存吗?我正在使用一个浮动的stl向量。

更清楚一点:我正在推迟另一个流程的时间值,而且我只需要最后5个时间值。

如何在不让向量填满并最终耗尽内存的情况下有效地执行此操作?

6 个答案:

答案 0 :(得分:6)

听起来好像你想要一个覆盖这些值的循环缓冲区 请查看boost示例。

答案 1 :(得分:3)

使用queue - 在这种情况下它是完美的。你推入队列直到它的大小为5,然后当添加一个新值时,你首先从队列弹出,然后推入它。

编辑:如果您需要能够直接访问所有5个元素,那么deque可能是更好的选择。我还认为默认队列实现基于deque。

答案 2 :(得分:2)

据我所知,队列(或双端队列)的内存使用量不是循环的。相反,它会在需要时生长,并偶尔复制以适应。

我建议制作自己的结构。您只需要一个大小为5的数组,以及“last”项的指针(或索引),它将被下一个新项覆盖。每次添加新值时,“last”项都会被覆盖,“last”指针会向上移动:

last = (last+1)%5;

确保找到处理启动的好方法,其中数组中的项目少于5个。如果您只是在开始时使用错误/中性值填充数组,那么您应该没问题。

答案 3 :(得分:0)

我认为STL队列就是你想要的。

答案 4 :(得分:0)

没有记住容器名称:) 我会使用std :: queue容器。因此,您可以从另一端删除而不必担心序列中的位置。关于穿线的事情...我想我不能不帮助afaik向量和列表不是线程安全的。

答案 5 :(得分:0)

我认为只要有新数据出现,数据就应该转移到下一个位置,
即:
stretch
当收到新数据时,预期的数组必须为
4->5->6->7 //old data

5->6->7->8 //updated