使用什么数据结构

时间:2011-06-05 00:55:32

标签: c++ data-structures boost

我正在为这种情况寻找合适的数据结构。我有提升可供使用。

代码最初是在C#中,我在那里使用了一个队列,但我不相信这是一个合适的选择,据我所知,C#的队列没有C ++等价物。我正在考虑以下属性的频率/重要性:

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

元素的数量在创建时将是已知的,并且将是50到200个元素。结构永远不会超过这个,但可能偶尔保持较少

我正在考虑使用std :: list,但是需要清除然后偶尔重新填充,这似乎不是一个好的选择。当我创建一个固定大小的列表,然后清除它,它失去了前缀大小不是吗?是否有某种方法可以始终保持列表大小,以便不必释放/分配内存?

我知道boost有一个队列数据结构,但它不可迭代,我不确定它是否会遇到与std::list

相同的问题

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

3 个答案:

答案 0 :(得分:10)

std::deque似乎符合您的所有要求。

如果效果对您来说是一个真正的问题,那么您应该阅读GMan's answerPre-allocate space for C++ STL queue

答案 1 :(得分:2)

听起来像环形缓冲区应该有效吗?提升中有一个:boost::circular_buffer

答案 2 :(得分:-3)

环形缓冲区(实现为静态数组Foo buffer[200]和两个计数器),如eevar所建议的那样最好。无需STL / Boost。