双标具有下标运算符的原因是什么?
What is the reasoning for a deque to have a subscript operator?
我今天和一个朋友聊天,他提出了当其他"类似"的 DS(如队列和堆栈(不能访问下标运算符时,下标运算符可以访问 deque 元素是多么奇怪。毕竟,deque不就是双端队列吗?可以随机访问 deque 的事实不会破坏 deque 数据结构的完整性吗?
另外,从性能的角度来看,除非你实际使用deque方法(前后函数系列(,否则deque不会完全使用下标运算符带来更少的内容吗?我知道 deque 背后的实现将其拆分为块/块,并且通常需要两个操作才能实际随机访问一个元素,而向量保证在连续内存中。
谢谢!
deque可以被随机访问的事实不会破坏deque数据结构的完整性吗?
不。你只是挂在它的名字上。我们确实对"队列"有一个明确的定义,所以这可能是一个糟糕的单词选择,但数据结构不是由其名称定义的。
日期结构是具有一组特定关联操作的数据 (duh(。使用下标运算符定义deque
的标准库。这就是数据结构。我们非常小心地确保操作的各种要求不会冲突,因此deque
作为数据结构的完整性得到了很好的维护。
此外,从性能的角度来看,除非您实际使用 deque 方法(前端和后端函数系列(,否则 deque 不会完全使用下标运算符带来更少的内容吗?我知道 deque 背后的实现将其拆分为块/块,并且通常需要两个操作才能实际随机访问一个元素,而向量保证在连续内存中。
与Vector相比,Deque还有另一个优势。 如果连续内存很大,超过操作系统可以分配的内存,则可能会耗尽矢量的内存。由于 deques 是分页内存,因此良好的实现可能会降低对操作系统的要求,因为内存要求是不连续的。
相关文章:
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- 是什么让一些命名函数/运算符与众不同?
- C++,()运算符重载,它的工作是什么
- std::set<Key,Compare,Allocator>::find() 函数使用"<"运算符而不是"=="运算符背后的直觉是什么?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- c++运算符重载-我实际返回的操作数类型是什么
- 这个typedef和转换运算符语法是什么意思
- 运算符和返回类型是什么意思?
- 双标具有下标运算符的原因是什么?
- 统一初始化是隐式发生的,即使 int 强制转换运算符是使用 explicit 关键字声明的.原因是什么?
- _bstr_t::运算符=是什么意思?
- Python的"in"运算符的C++等价物是什么?
- 将强制转换运算符重载到 std::map 的正确语法是什么
- typeid 运算符忽略 cv 限定符背后的理由是什么?
- 初始化中的模板转换运算符类型推导规则是什么?
- 运算符在C++" "是什么?
- "<<"和">>"运算符的名称是什么?
- 此代码运算符超载中的错误是什么?
- 将多个值与同一变量进行比较时'!='运算符最简洁的方法是什么?