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

下面是我们自己写一个泛型算法的迭代器类。

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;

}

打印信息我这就不写出来了,如果有兴趣可以自己去试验,嘻嘻!





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值