了解迭代器/ const_iterator的实现

时间:2019-12-10 07:44:28

标签: c++ iterator

我知道如何在表面级别上使用迭代器,但是我试图了解迭代器如何与诸如vector之类的容器类相关联。

根据 why do we put :: (scope resoulation operator) before iterator?

  

std::vector是std名称空间中的类模板,它使std::vector<double>成为一个类。

     

std::vector<T>::iteratorstd::vector<T>

下的嵌套类型

据我了解,类模板vector具有类型iterator的成员,它是从#include <iterator>中的类模板获取的。

这令人困惑,因为当我查看http://www.cplusplus.com/reference/iterator/iterator/时,const_iterator中没有#include <iterator>类模板可以看到吗?

1 个答案:

答案 0 :(得分:0)

从评论中收集信息:

    std::iterator中的
  • #include <iterator>自C ++ 17起已弃用

  • 在弃用之前,借助于std::iterator模板类,对于STL容器(由实现定义)实现迭代器是可能

  • 对于vector,例如:

      

    std::vector的规范中没有任何内容说明   vector::iteratorvector::const_iterator具有特定的   与std::iterator的关系(即使在不赞成使用的标准中   std::iterator)。另外,尽管iteratorconst_iterator是   在vector范围内声明的类型,没有要求   vector具有任一类型的成员-iteratorconst_iterator是   std::vector接口的一部分,例如成员超载   begin()返回这些类型,但是关于这些如何   函数获取返回的迭代器

  • 在STL容器中需要和不需要的是:

      

    ”返回的开始和结束函数   迭代器(或满足以下条件的原始指针:   迭代器)。没有什么说迭代器需要   在容器中实现。”(示例为std::pair,它是没有迭代器的容器)

  • STL容器通常使用某些迭代器类别(例如iterator)的那些类型定义别名,这些成员类型(const_iteratorLegacyRandomAccessIterator等)被定义为“指向元素的指针”数组满足LegacyRandomAccessIterator“的所有要求。