我知道如何在表面级别上使用迭代器,但是我试图了解迭代器如何与诸如vector
之类的容器类相关联。
根据 why do we put :: (scope resoulation operator) before iterator?
std::vector
是std名称空间中的类模板,它使std::vector<double>
成为一个类。下的嵌套类型
std::vector<T>::iterator
是std::vector<T>
据我了解,类模板vector
具有类型iterator
的成员,它是从#include <iterator>
中的类模板获取的。
这令人困惑,因为当我查看http://www.cplusplus.com/reference/iterator/iterator/时,const_iterator
中没有#include <iterator>
类模板可以看到吗?
答案 0 :(得分:0)
从评论中收集信息:
std::iterator
中的 #include <iterator>
自C ++ 17起已弃用
在弃用之前,借助于std::iterator
模板类,对于STL容器(由实现定义)实现迭代器是可能。
对于vector
,例如:
std::vector
的规范中没有任何内容说明vector::iterator
或vector::const_iterator
具有特定的 与std::iterator
的关系(即使在不赞成使用的标准中std::iterator
)。另外,尽管iterator
和const_iterator
是 在vector
范围内声明的类型,没有要求vector
具有任一类型的成员-iterator
和const_iterator
是std::vector
接口的一部分,例如成员超载begin()
返回这些类型,但是关于这些如何 函数获取返回的迭代器
在STL容器中需要和不需要的是:
”返回的开始和结束函数 迭代器(或满足以下条件的原始指针: 迭代器)。没有什么说迭代器需要 在容器中实现。”(示例为
std::pair
,它是没有迭代器的容器)
STL容器通常使用某些迭代器类别(例如iterator
)的那些类型定义别名,这些成员类型(const_iterator
,LegacyRandomAccessIterator
等)被定义为“指向元素的指针”数组满足LegacyRandomAccessIterator
“的所有要求。