Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ deque有下标运算符的原因是什么?_C++_Vector_Stl_Deque - Fatal编程技术网

C++ deque有下标运算符的原因是什么?

C++ deque有下标运算符的原因是什么?,c++,vector,stl,deque,C++,Vector,Stl,Deque,我今天和一位朋友聊天,他提到了deque元素能够被下标操作符访问,而其他“类似”DSs(如队列和堆栈)却不能访问,这有多奇怪。毕竟,deque不就是指双向排队吗?deque可以随机访问的事实是否破坏了deque数据结构的完整性 另外,从性能的角度来看,deque不是完全使用下标操作符来减少表中的内容吗,除非您实际使用了deque方法(前向函数和后向函数族)?我知道deque背后的实现将其拆分为块/块,通常需要两个操作才能真正随机访问元素,而向量保证在连续内存中 谢谢 deque可以随机访问的事实

我今天和一位朋友聊天,他提到了deque元素能够被下标操作符访问,而其他“类似”DSs(如队列和堆栈)却不能访问,这有多奇怪。毕竟,deque不就是指双向排队吗?deque可以随机访问的事实是否破坏了deque数据结构的完整性

另外,从性能的角度来看,deque不是完全使用下标操作符来减少表中的内容吗,除非您实际使用了deque方法(前向函数和后向函数族)?我知道deque背后的实现将其拆分为块/块,通常需要两个操作才能真正随机访问元素,而向量保证在连续内存中

谢谢

deque可以随机访问的事实是否破坏了deque数据结构的完整性

不,你只是挂断了它的名字。我们心里确实有一个“队列”的清晰定义,所以这可能是一个糟糕的词语选择,但数据结构不是由其名称定义的

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

另外,从性能的角度来看,deque不是完全使用下标操作符来减少表中的内容吗,除非您实际使用了deque方法(前向函数和后向函数族)?我知道deque背后的实现将其拆分为块/块,通常需要两个操作才能真正随机访问元素,而向量保证在连续内存中


deque与vector相比还有另一个优势。如果连续内存很大,操作系统可能无法分配,那么向量的内存可能会耗尽。因为deque是分页内存,一个好的实现可能会降低对操作系统的要求,因为内存要求是不连续的。

换句话说,这里的
deque
只是一个前面有快速插入/删除的向量的名称。@bipll:除了它与向量不太相似之外。首先也是最重要的是,
deque
不像
vector
那样分配连续的内存块。bipll:deque不能作为向量实现。当达到容量时,vector的底层内存将不时重新分配。然而,在C++标准中,如果元素仅通过PuthJoePrd/PuthFig插入,那么对DeQu中的元素的引用对于所有时间都是有效的。唯一可以满足这一要求的方法是,如果deque是指向元素页面的指针数组。数组可以重新分配,新页面可以添加到前面和后面,而不会干扰现有页面。您也可以使用向量作为队列。它的表现就像垃圾=P