我正在为这种情况寻找合适的数据结构。我有提升可供使用。
代码最初是在C#中,我在那里使用了一个队列,但我不相信这是一个合适的选择,据我所知,C#的队列没有C ++等价物。我正在考虑以下属性的频率/重要性:
元素的数量在创建时将是已知的,并且将是50到200个元素。结构永远不会超过这个,但可能偶尔保持较少
我正在考虑使用std :: list,但是需要清除然后偶尔重新填充,这似乎不是一个好的选择。当我创建一个固定大小的列表,然后清除它,它失去了前缀大小不是吗?是否有某种方法可以始终保持列表大小,以便不必释放/分配内存?
我知道boost有一个队列数据结构,但它不可迭代,我不确定它是否会遇到与std::list
关于如何使std::list
适合我的问题或更合适的数据结构的一些建议会有所帮助。
答案 0 :(得分:10)
std::deque
似乎符合您的所有要求。
如果效果对您来说是一个真正的问题,那么您应该阅读GMan's answer至Pre-allocate space for C++ STL queue。
答案 1 :(得分:2)
听起来像环形缓冲区应该有效吗?提升中有一个:boost::circular_buffer
。
答案 2 :(得分:-3)
环形缓冲区(实现为静态数组Foo buffer[200]
和两个计数器),如eevar所建议的那样最好。无需STL / Boost。