为什么std :: queue没有operator []?

Dav*_*cki 3 c++ queue subscript-operator

std::queue与默认情况下,双端队列来实现.std::deque有下标运算符,operator[]并且可能用数组实现.那么,为什么std::queueoperator[]

我意识到你可以有一个列表作为底层容器.(std::queue<int, std::list<int>>.)但即使这会使下标操作符变慢,这真的是一个不包含它的理由吗?这是我能想到它不包括在内的唯一原因.

Naw*_*waz 8

因为队列的定义不支持这样的接口.队列是FIFO数据结构,意思是先进先出.队列支持入出队 操作.

想象一下队列作为管道:您将数据插入到一端,从另一端插入数据 - 逐个.插入数据称为enqueue,将其取出称为dequeue.C++标准库std::queue定义了这两个操作:push()是入队操作的名称,出列操作分为两个步骤,即front()后面跟着pop().出列的原因分为两步,就是给出强有力的例外保证1.

维基百科简要解释了这一点

队列是一种特殊类型的集合,其中集合中的实体按顺序保存,集合上的主要(或仅)操作是向后端子位置添加实体并从前端子位置移除实体.这使得队列成为先进先出(FIFO)数据结构.在FIFO数据结构中,添加到队列的第一个元素将是第一个要删除的元素.这相当于一旦添加了元素,就必须在调用新元素之前删除之前添加的所有元素的要求.队列是线性数据结构的示例.

1.如果你想知道它是如何得到强有力的异常保证,那么你可以开始另一个话题,因为它是一个很长的故事,需要很大的耐心才能正确理解它.我建议你阅读Herb Sutter的Exceptional C++.