要使用的数据结构

What data structure to use

本文关键字:数据结构      更新时间:2023-10-16

我正在为这个场景寻找合适的数据结构。我有增压器可供使用。

代码最初是用C#编写的,我在那里使用了一个队列,但我认为这不是一个合适的选择,而且据我所知,C#的队列没有C++等价物。我从频率/重要性的角度来看以下属性:

  • 需要快速迭代
  • 需要能够快速推进结构(即,当我从顶部拉出一个元素时,下一个元素应该是结构头)
  • 偶尔会被清除,然后完全重新填充
  • 偶尔会被复制
  • 不需要排序,因为元素将按正确顺序添加

元素的数量在创建时是已知的,并且将是50到200个元素。该结构永远不会容纳更多的,但偶尔可能会容纳更少的

我曾考虑使用std::list,但由于需要偶尔清除然后重新填充,这似乎不是一个好的选择。当我创建一个固定大小的列表,然后清除它时,它会丢失前缀大小,不是吗?有没有办法总是保持列表的大小,这样它就不必解除分配/分配内存了?

我知道boost有一个队列数据结构,但它是不可迭代的,我不确定它是否会出现与std::list 相同的问题

关于如何将std::list融入我的问题或更合适的数据结构的一些建议会很有帮助。

std::deque似乎满足了您的所有要求。

如果性能对您来说是一个真正的问题,您应该阅读GMan对为C++STL队列预先分配空间的回答。

听起来环形缓冲区应该工作吗?boost中有一个:boost::circular_buffer

eevar建议的环形缓冲区(实现为静态数组Foo buffer[200]和两个计数器)将是最好的。不需要STL/Boost。