在编写一个带有泛型双向迭代器的函数之前,我想测试一下int的向量是如何工作的.
vector<int> a(10,1);
iterator<bidirectional_iterator_tag, int> i = a.begin();
for (; i != a.end(); ++i) cout << *i;
这段代码不能编译.g ++抱怨你不能将begin()的返回类型转换iterator<bidirectional_iterator_tag, int>为操作符++并且*没有在其上定义.显然我做错了什么,会很感激帮助.
尽管std::iterator是一个简化新迭代器实现的基类,但并非所有迭代器都是使用它实现的,并非所有迭代器都转换为此迭代器.迭代器类的唯一要求是它提供一组给定的操作.这没有暗示类层次结构,并且大多数容器都会发送它们自己的迭代器类.所以在这种情况下,您应该使用vector<int>::iterator迭代器的类型.或者,如果您使用的是最新的C++ 11标准,则可以使用auto编译器推断出类型.