5

在编写一个采用通用双向迭代器的函数之前,我想测试一下它对整数向量的工作方式。

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>运算符++*并且未在其上定义。显然我做错了什么,希望得到帮助。

4

1 回答 1

6

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

于 2012-07-18T19:43:58.483 回答