[英]Understanding iterator/const_iterator implementation
我知道如何在表面级别使用迭代器,但我试图了解迭代器如何与容器类(例如vector
。
std::vector
是 std 命名空间中的类模板,它使std::vector<double>
成为一个类。
std::vector<T>::iterator
是std::vector<T>
下的嵌套类型
据我所知,类模板vector
有一个iterator
类型的成员,它从#include <iterator>
的类模板中获取。
这令人困惑,因为当我查看http://www.cplusplus.com/reference/iterator/iterator/时, #include <iterator>
没有我可以看到的const_iterator
类模板?
从评论中收集的信息:
来自#include <iterator>
std::iterator
从 C++17 开始被弃用
它被废弃之前,对STL容器(这是实现定义)来实现的迭代器与的帮助下是可能std::iterator
模板类。
以vector
为例:
std::vector
的规范中没有任何内容表明vector::iterator
或vector::const_iterator
与std::iterator
有任何特殊关系(即使在std::iterator
弃用之前的std::iterator
)。 此外,虽然iterator
和const_iterator
是在vector
范围内声明的类型,但不要求vector
具有任一类型的成员 -iterator
和const_iterator
是std::vector
接口的一部分,例如成员begin()
重载返回这些类型,但没有说明这些函数如何获得它们返回的迭代器
STL 容器中需要和不需要的是:
“返回迭代器(或满足迭代器要求的原始指针)的开始和结束函数。没有任何内容表明迭代器需要在容器中实现。”
STL 容器定义了那些成员类型( iterator
、 const_iterator
等),通常具有某些迭代器类别的类型别名,例如LegacyRandomAccessIterator
,其定义为“指向数组元素的指针满足LegacyRandomAccessIterator
所有要求”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.