【问题标题】:Random access iterators and deque随机访问迭代器和双端队列
【发布时间】:2019-10-07 11:11:30
【问题描述】:

我今天正在阅读一些文本,它指出由于 std::deque 确实有一个随机访问迭代器,它的项目检索率时间复杂度是 O(1)。虽然我同意项目检索的时间复杂度为 O(1) 的事实,但随机访问迭代器与它有什么关系?

【问题讨论】:

  • item retrieval rate time complexity 可能意味着使用operator[](也称为at())按索引访问元素的复杂性。考虑std::list;它没有随机访问迭代器,访问第 n 个元素是 O(n)。

标签: c++ c++11 deque


【解决方案1】:

RandomAccessIterator 概念要求+- 操作必须在恒定时间内实现:

来自[iterator.concept.random.access]

RandomAccessIterator 概念增加了对使用 +=、+、-= 和 - 的恒定时间推进的支持,以及使用 - 计算恒定时间距离的支持。随机访问迭代器还支持通过下标的数组表示法。

这意味着任何实现随机访问迭代器的符合标准的容器都必须提供恒定时间的元素检索。

【讨论】:

  • 可以拥有一个缺少 atoperator[] 但具有随机访问迭代器的容器。这意味着reference operator[](size_t i) { return *(begin() + i); } 是一个有效的实现
猜你喜欢
  • 1970-01-01
  • 2022-11-14
  • 2020-08-10
  • 2015-06-26
  • 1970-01-01
  • 2014-03-14
  • 2017-05-20
  • 2017-01-24
  • 2017-09-02
相关资源
最近更新 更多