从向量中获取通用双向迭代器

时间:2012-07-18 19:39:32

标签: c++ stl iterator

在编写一个采用泛型双向迭代器的函数之前,我想测试一下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>,并且没有在其上定义运算符++*。显然我做错了什么,会很感激帮助。

1 个答案:

答案 0 :(得分:6)

尽管std::iterator是一个简化新迭代器实现的基类,但并非所有迭代器都是使用它实现的,并非所有迭代器都转换为此迭代器。迭代器类的唯一要求是它提供一组给定的操作。这没有暗示类层次结构,并且大多数容器都会发送它们自己的迭代器类。因此,在这种情况下,您应该使用vector<int>::iterator作为迭代器的类型。或者,如果您使用的是最新的C ++ 11标准,则可以使用auto让编译器推断出类型。