要使用的数据结构
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。
相关文章:
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- C++中deque数据结构的大O是什么?
- 我可以使用哪种数据结构来处理这种方式
- 将文本文件解析为树状数据结构
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 带参数的数据结构的全局声明