德克实现选项
deque implementation options
我需要构建自己的deque,因为我编程的环境没有这样的东西。我发现自己在如何实现它的两个选择之间左右为难:
- 我可以管理一个可扩展的指针数组,指向保存数据的数组。问题是,如何确定每个辅助数组的大小?
- 我可以有一个定期增长的大型缓冲区,并在其上构建一个循环队列。在一定规模之后,这似乎很糟糕,因为大量分配越来越难以有效完成。
有什么想法吗?
对于第一个选项,您只需在分配每个数组时将每个数组的大小比以前的数组大小加倍,也许最高可达某个上限,具体取决于您对应用程序或内存约束的了解。
你似乎已经想通了。
为什么不只是一个简单的双向链表?您需要快速随机访问吗?
另一种方法是拥有向量列表(固定大小)。列表作为第一个DS的好处是您可以在头部和尾部以及两者之间添加元素。具有固定大小矢量的好处是您可以模拟二维数组,行的添加/删除是恒定时间。现在假设你想加头。您应该在 head 的列表中添加一个节点( const 时间 ),然后在固定大小向量的最后一个添加条目。因此,当取消排队已经有数据时,请考虑头部的任何条目,您将在第一行的最后一列插入。如果行中有可用空间,则在头部的任何进一步插入都将发生在第一行的倒数第二个未填充列中。其他明智的人重复相同的步骤。末尾的正常插入通常作为列表向量的末尾发生,其中插入从向量的开头发生。
我会做两个选项的组合 - 多个较小的缓冲区,并让每个"结束"指向另一个,本质上成为一个更大的圆形数组。 这样,您就不需要几乎经常分配缓冲区。 至于二级缓冲区的大小,我认为 Collin的建议是一个很好的建议 - 随时增加大小。
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在c++中实现处理器调度模拟器
- Win32编译器选项和内存分配
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 实现一个在集合上迭代的模板函数
- 如何使用选项真、假、默认值和切换C++实现标志
- 继承自定义选项卡栏和调整大小事件的实现
- boost::program_options是否可以实现这种可重复选项
- 复制构造函数和赋值运算符实现选项 -
- 使用带有自定义对齐分配器实现的最新g++,使用SSE和-O3选项编译时出现非法指令(核心转储)
- 创建一个实现选项卡并可用作 QMainWindow 中的"central widget"的类
- 实现windows窗体c++选项卡选择事件
- 实现Qt无框小部件的大小调整选项
- 德克实现选项