双端队列有下标运算符的原因是什么?

时间:2018-06-27 02:21:08

标签: c++ vector stl deque

我今天在和一个朋友聊天,他谈到当其他“相似” DS(例如队列和堆栈)无法访问时,下标运算符可以访问双端队列元素是多么奇怪。毕竟,双端队列不是仅意味着双端队列吗?可以随机访问双端队列的事实是否会破坏双端队列数据结构的完整性?

从性能的角度来看,除非您实际上使用的是双端队列方法(前后函数族),否则双端队列不会完全用下标运算符带到表中吗?我知道deque背后的实现将其拆分为块/块,并且通常需要两个操作才能实际随机访问元素,而向量必须保证在连续内存中。

谢谢!

2 个答案:

答案 0 :(得分:3)

  

可以随机访问双端队列的事实是否会破坏双端队列数据结构的完整性?

不。您只是想知道它的名字。我们确实对“队列”有一个清晰的定义,因此这可能是单词的一个较差的选择,但是数据结构不是由其名称定义的。

日期结构是具有一组特定的关联操作的数据(duh)。标准库使用下标运算符定义了deque。这就是数据结构。我们非常注意确保操作上的各种要求不会冲突,因此deque作为数据结构的完整性得到了很好的维护。

答案 1 :(得分:0)

  

从性能的角度来看,除非您实际上使用的是双端队列方法(前后函数族),否则双端队列不会完全用下标运算符带到表中吗?我了解到deque背后的实现将其拆分为块/块,并且通常需要两个操作才能实际随机访问元素,而向量必须保证在连续内存中。

与vector相比,deque具有另一个优点。如果连续内存很大,则可能会耗尽向量的内存,这将超出OS可以分配的内存。由于双端队列是分页内存,因此良好的实现可能会降低对OS的要求,因为内存要求是不连续的。