`iterator` 和 `const_iterator` 不是 STL 容器的必需成员吗?

csg*_*guy 2 c++ containers iterator stl

摘自了解迭代器/const_iterator 实现

“虽然iteratorconst_iterator是在 范围内声明的类型vector,但不要求vector(或任何 STL 容器)具有任一类型的成员 -iterator并且const_iterator是接口的一部分, std::vector例如该成员的重载begin()返回这些类型,但没有说明这些函数如何获得它们返回的迭代器”

此外,STL 容器必须具有:

“返回迭代器的开始和结束函数”

例如,上面指出iterator并且const_iterator不是 STL 容器的必需成员vector。我认为这意味着返回的类型.begin.end将根据实现而有所不同。

所以我想知道为什么这没有问题,因为我看到很多人写出std::vector<someType>::iteratorstd::vector<someType>::const_iterator在何处iteratorconst_iterator被指定而不是使用auto例如:

for (std::vector<int>::iterator i = s.begin(); i != s.end(); i++)
{

}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 7

你读错了报价。人说

拥有任一类型的成员

不是

有任何一种

当他们说拥有任一类型的成员时,他们的意思是没有类型iteratorconst_iterator类中的数据成员。

他们确实继续说

iterator并且const_iterator是界面的一部分std::vector

这是正确的,因为标准要求std::vector在其接口中显示这些类型。