如何实现非连续容器(例如std :: deque)的随机访问迭代器?

chbaker0

我了解随机访问迭代器如何为类似std::vector容器工作:迭代器仅维护指向当前元素的指针,并且任何加法/减法都会应用于该指针。

但是,我对于如何为非连续容器实现类似功能感到困惑。我对std::deque:iterator工作方式的第一个猜测是,它维护着一个指向它所包含的连续内存组的某些表的指针,但是我不确定。

典型的标准库将如何实现呢?

Yakk-亚当·内夫罗蒙特

你能满足的了requirememtsstd::deque具有std::vector<std::unique_ptr<std::array<T,N>>>大致。加上低/高水位标记,告诉您第一个/最后一个元素在哪里。(对于定义为N的实现,它可能随而变化T,并且std::arrays实际上是正确对齐的未初始化内存的块,而不是std::arrays,但是您可以理解)。

使用通常的指数增长,但同时在正面和背面。

查找只是简单地进行操作(index+first)/N%N找到block和sub元素。

这比std::vector查找要贵,但是是O(1)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

对于C ++随机访问迭代器(矢量迭代器),如何计算迭代器之间的差异?

C++ 非连续容器(如 deque)的迭代器如何找到下一个元素

是否有用于随机访问迭代器的 std 视图,因为 std::span 用于连续迭代器?

C ++迭代器“ for循环”惯用语,其步长> 1并允许非随机访问反向迭代器

通过模板访问std容器的迭代器

C ++随机访问迭代器,用于按需加载元素的容器

C++;将 std::array 随机访问迭代器作为函数参数传递

当 RTC_DCHECK_IS_ON 时 WebRTC std::deque 迭代器异常

向 std::deque 迭代器添加值是否安全

std::deque 是不是连续的内存容器?

如何实现支持可变迭代器的容器?

如何访问给定类型的迭代器对象

检查随机迭代器实现后缀和前缀中的边界

随机访问迭代器:我缺少什么?

非模板容器迭代器

如何获得两个(伪)随机但彼此不同的容器迭代器/元素?

如何实现迭代器?

将随机访问迭代器的和表示为随机访问迭代器

检查 std::list 迭代器是否在没有访问容器的情况下结束

朋友迭代器可以访问非静态数据成员吗?

通过取消引用的迭代器访问 std::set

对于随机访问迭代器(矢量迭代器),迭代器是C ++样式指针吗?

使用迭代器时如何访问对象在矢量中的位置?

STL容器中的迭代器实现

如何访问随机中继器的孩子的属性?

Deque 迭代器不可递减

随机访问迭代器会转换为InputIterator吗?

可以将结束的随机访问迭代器增加零吗?

随机访问迭代器和双端队列