关于自定义迭代器类出现的问题可能解决方案

发布时间:2016-12-8 4:12:11 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"关于自定义迭代器类出现的问题可能解决方案",主要涉及到关于自定义迭代器类出现的问题可能解决方案方面的内容,对于关于自定义迭代器类出现的问题可能解决方案感兴趣的同学可以参考一下。

下面是我们自己写一个泛型算法的迭代器类。 template <class elemType> class Iterator { ..... //具体定义的内容省略 } template <class elemType> class Array{ ..... Iterator<elemType> begin() { ..... } //模仿泛型算法的应用 Iterator<elemType> end() { ...... } } #include<algorithm> int main() { int a[] = {1, 2, 3, 4, 5, ,6 , 7}; Array<int> iA(a, a+7); Iterator<int>  iter = iA.begin(); //自定义迭代器的应用 Iterator<int>  iter_end = iA.end(); int minvalue = *min_element(iter, iter_end); } 编译时,出现如下问题: error C2039: 'iterator_category' : is not a member of 'Iterator<elemtype>' ...... error C2146: syntax error : missing ':' before identifier ' iterator_category' error C4430: missing type specifier-int assumed. Note:C++ does not support default-int error C2602: 'std::iterator_traits<_Iter>::iterator_category' is not a member of a base class of 'std::iterator_traits<_Iter>' ....... //省略大部分报错,共有几十个错误,但往往一下报错那么多的时候,错误更少,也许只是一个类型变化,函数调用的问题等等,所以我们不要被那些数字吓倒。 下面是解决方案: 其实只要在class Iterator 后加public iterator<forward_iterator_tag, elemType>即 template <class elemType> class Iterator : public iterator<forward_iterator_tag, elemType> { ........ } 这样问题就解决啦!改动是不是很小!另外提醒使用iterator要调用#include<iterator>  std::iterator不要忘了哦,要不然又有新的问题了。 ------------------------------------------------------------分割线---------------------------------------------------------------------- 下面提供自定义迭代器的另一种实现,代码如下: #include <iostream> #include <vector> #include <list> #include <iterator> template <class BDIter> void alg(BDIter, BDIter, std::bidirectional_iterator_tag) { cout << "bidirectional_iterator_tag\n"; } template <class RAIter> void alg(RAIter, RAIter, std::random_access_iterator_tag) { cout << "random_access_iterator_tag\n"; } template <class Iter> void alg(Iter first, Iter last ) { alg(first, last, std::iterator_traits<Iter>::iterator_category()); } int main() { std::vector<int> v; alg(v.begin(),  v.end()); std::list<int> l; alg(l.begin(), b.end()); return 0; } 打印信息我这就不写出来了,如果有兴趣可以自己去试验,嘻嘻!

上一篇:java获取文件路径
下一篇:Direct2D 及 WPF手动绘图中的线宽问题

相关文章

相关评论