设为首页 加入收藏

TOP

一步一步认识C++STL中的迭代器(三)
2015-07-24 06:00:34 来源: 作者: 【 】 浏览:24
Tags:步一步 认识 STL
er; } } else//当n小于0时,向前移 { while(n++) { --iter; } } } //定义随机访问迭代器移动的方法 template inline void _advance(RandomAccessIterator &iter,Distance n, random_access_iterator_tag) { iter+=n; } //自适应的调用advance函数 template inline void advance(InputIterator &iter,Distance n) { _advance(i,n,iterator_catetory(iter)); } 从上面的代码中不难发现,实现一个迭代器,需要做一下工作:

1.定义5类迭代器的标志类,该标志类用于实现函数的区别调用(即重载),例如求两迭代器距离函数distance(iter1,iter2,tag),移动函数advance(iter,n,tag)。这五个标志类分别为:input_iterator_tag,output_iterator_tag,forward_iterator_tag,bidirectional_iterator_tag,random_access_iterator_tag。

2.对于每一个iterator类,都必须包含5个属性,分别为:iterator_category、value_type、difference_type、pointer、reference。

3.定义一个迭代器的“属性榨汁机”iterator_traits,用于获取iterator的5中属性值。

4.定义迭代器的操作,分别为:

1) 获取iterator的标志----->iterator_category(iter);

2)获取两迭代器差值的类型----->distance_type(iter);

3)获取迭代器的原始类型--------->value_type(iter);

4)求两迭代器的距离---------------->distance(iter1,iter2,tag);

5)将迭代器移动n位------------------>advance(iter,n,tag)。

参考文献:

[1]《C++ Primer中文版 第4版》

[2]《STL源码剖析 侯捷》

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++迭代器失效的问题 汇总 下一篇在ZendStduio下如何使用Mysql管理..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: