STL源码分析之二—迭代器
来源:互联网 发布:剑灵捏脸数据天族女 编辑:程序博客网 时间:2024/05/15 01:14
1.Traits编程技巧:
Traits编程技法大量运用在STL实现品中,它利用“内嵌型别”的编程技巧与编译器的template参数推导功能,增强C++未能提供的关于型别认证方面的能力,弥补C++不为强型别语言的遗憾,
例:
Template <class T>
Struct MyIter
{
Typedef T value_type;
T*ptr;
MyIter(T* p = 0):ptr(p){}
T& operator*() const{return *ptr;}
};
Template <class T>
Typename I::value_type
Func(I ite)
{
Return *ite;
}
Myiter<int> ite(new int(8));
Cout<<func(ite);
注意:func()的返回值必须加上关键词typename,因为T是一个template参数,在他被编译器具体现化之前,编译器对T一无所知;换句话说,编译器并不知道MyIter<T>::value_type代表的是一个型别还是一个member function 或是一个data member。关键词typename的用意就是在告诉编译器这是一个型别,这样才能通过编译。
2.
迭代器相应型别之一:valule type
指迭代器所指对象的型别。任何一个打算和STL算法有完美搭配的class,都应该定义自己的value type内嵌类型。
迭代器型别二:difference type
用来表示两个迭代器之间的距离,因此它可以表示一个容器的最大容量,如STL的count(),返回值就必须使用difference type。
template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count(InputIterator first, InputIterator last, const T& value) {
typename iterator_traits<InputIterator>::difference_type n = 0;
for ( ; first != last; ++first)
if (*first == value)
++n;
return n;
}
迭代器型别三:reference type
迭代器型别四:pointer type
迭代器型别五:iterator_category
3.迭代器分类:
Input iterator :这种迭代器所指对象,不允许外界改变,只读。
Output iterator:只写。
Forward iterator :允许“写入型”算法,(replace())在此种迭代器所形成的区间上进行读写操作。(允许operator++)
Bidirectional iterator :可双向移动,(允许operator++也可以operator--)
Random Access iterator:包含所有的指针算数能力,包括p+n, p-n,p[n],p1-p2.p1<p2....
- STL源码分析之二—迭代器
- STL源码分析——迭代器(二)
- STL源码分析之vector(二)—核心函数 push_back及insert_aux
- STL 源码分析之string(二)基础篇—append,reserve,assign
- STL源码分析之感想
- STL源码分析之Vector
- STL源码分析之Vector
- STL之pair源码分析
- STL源码分析之大顶堆
- STL源码分析之hashtable
- STL源码分析之__type_traits
- STL 源码分析 之 rotate()函数分析
- STL源码之迭代器
- STL源码之迭代器
- stl源码剖析之vector,list,deque迭代器分析
- 《STL源码剖析》之vector分析
- 《STL源码剖析》之vector分析
- STL源码分析之vector容器
- [转载]图像缩放的双线性内插值算法的原理解析【转】
- Android DocumentUi(下载管理)是如何向DownloadProvider中获取数据的
- ControlSet001、ControlSet002、CurrentControlSet的区别
- unity3d第十五天
- hadoop面试题目
- STL源码分析之二—迭代器
- ···c#学习(四)···
- django 后台输入中文,保存时乱码
- IOS 如何删除文件夹下所有的SVN文件
- 夏*夜
- 动态规划之前缀动态规划:poj 1458 Common Subsequence(最长公共子序列)
- C语言中的参数不确定
- 晨魅--练习ssm框架整合,做增删改查操作
- lsusb