【问题标题】:why C++ STL have five different iterators? [closed]为什么 C++ STL 有五个不同的迭代器? [关闭]
【发布时间】:2014-01-22 05:19:40
【问题描述】:

为什么 C++ STL 有五个迭代器?只有随机迭代器足以对所有容器进行操作。有什么具体原因吗?

对不起..这是我的错误..我不是说随机迭代器...我应该问双向迭代器...所以你不认为只有双向迭代器可以覆盖输入的功能吗?输出,前向迭代器?那么引入(输入、输出、转发)迭代器概念有什么具体原因吗?谢谢。 ——

【问题讨论】:

  • 如何在std::list 上操作随机访问迭代器,更不用说std::forward_list
  • 对此有 10.000 个答案。并非每个集合都可以在两个方向(地图、图表、单链表)和恒定时间内访问(注意每个单词)。
  • Only random iterator could be sufficient to operate on all the containers. 不,错了。有趣的是,C++ 标准体比你更了解,事实证明 ;)

标签: c++ stl


【解决方案1】:

容器并不是唯一有趣的序列。此外,std::list<...> 和关联容器虽然是容器,但没有有效的随机访问方法。 std::forward_list<...> 只能走一个方向。当序列是源或漏时,它们通常只能遍历一次。哦,看!我实际上给出了所有五个类别的理由!

请注意,“STL 迭代器”不是类,而是概念,即满足相应迭代器概念所需的操作和相关类型的要求。基本思想是算法接口是根据最弱的概念来指定的,从而产生有效的实现。当为算法提供更强大的概念时,它们可能能够应用一些优化。这种方法产生了在各种不同序列上运行的灵活高效的算法。

【讨论】:

    【解决方案2】:

    想知道为什么check this page

    随机访问迭代器不能总是工作。一个简单的例子:如果你通过网络传输数据,你不能从头开始。还有更多的原因,但只需阅读页面即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-05
      • 2021-08-19
      • 2016-12-19
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      相关资源
      最近更新 更多