实现队列的有效方法是什么?

Pas*_*mer 7 c++ queue

实现队列的有效方法是什么,以了解它是如何实现的?

编辑:我查看了stl :: queue代码以了解abt如何实现,但模板代码使其难以理解.毕竟,使用比有链表更有效的方法.

Jam*_*ran 12

最有效的方法是让别人去做.

C++和C#(以及.NET等)在其本机库中都有一个.

  • +1完美融合讽刺和实用性:) (5认同)
  • 我可以把它放在我的简历上吗? (2认同)

Dan*_*Tao 5

当然,对于任何生产代码,您应该依赖于已经经受住时间考验的强大库实现.

也就是说,对于自学而言,自己写一篇文章会很有趣.我以前做过.

我所知道的最有效的方法是对大多数可调整大小的集合在内部使用类似的方法:存储一个数组,当集合的大小达到数组的长度时,数组会根据需要增加(通常加倍).

但是,队列与普通集合略有不同,因为您希望能够从推送元素的另一端弹出.

显然,要删除第一个元素并将所有其他元素向下移动一个索引将是昂贵且毫无意义的.因此,您可以自己跟踪起始和结束指数.当集合到达数组的末尾时,您可以使用%开始时向后推送元素.

关键是简单地计算你的数学运算,以便处理所有情况,例如,当队列已满时正确地增长数组,正确地进行边界检查,在每次弹出时增加起始索引(或循环回0)等.

显然,我上面描述的设计有许多限制:例如线程安全.但是对于简单的,单线程的,高效的实现,这是一个非常好的起点.

祝你好运 - 如果你有一个你认为有效的代码,我也建议发布你的代码!