7 STL迭代器
来源:互联网 发布:go编程语言 编辑:程序博客网 时间:2024/05/01 16:22
7 STL迭代器
7. 1 迭代器头文件
有几种特殊的迭代器被定义于<iterator>中。
7.2 迭代器类型
注意1:比较这两个程序:
(1)while(ture){*pos = foo(); ++pos} (2)while(pos != coll.end()){*pos = foo(); ++pos;}
对于output迭代器,没有定义operator !=,只适用于第一个程序;
对于forward迭代器,若使用程序1,最终会提取end(),导致未定义行为,所以只适用于第二个程序。
注意2:对于vector和string,不要使用++coll.begin(),而要使用pos = coll.begin(); ++pos;。因为它们的迭代器通常实现为一般指针。
7.3 迭代器相关辅助函数
1、void advance(InputIterator& pos, Dist n); <iterator>
使迭代器pos步进或步退n个元素(对于双向迭代器或随机存取迭代器,n可为负值)。
2、Dist distance(InputIterator pos1, InputIterator pos2); <iterator>
传回两个迭代器之间的距离。(两个迭代器必须指向同一个元素;若不是随机存取迭代器,pos2的位置必须在pos1之后或相同。)
3、void iter_swap(FoewardIterator1 pos1, ForwardIterator2 pos2); <algorithm>
交换pos1和pos2所指的值。(迭代器类型不必相同)
7.4 迭代器配接器(Iterator Adapter)
1、reserve迭代器(逆向迭代器)
可将一般迭代器转化为一个逆向迭代器:
vector<int> coll;//初始化为1-9;vector<int>::iterator pos;vector<int>::reserve_iterator rpos(pos);//若*pos为5,*rpos则为4。(实际位置不变,但所代表的的逻辑数值不同,*rpos的数值为*pos之前一个元素)vector<int>::iterator rrpos;rrpos = rpos.base(); //base()可将逆向迭代器转换为正常迭代器,*rrpos与*pos相等。
实际上rbegin()即container::reverse_iterator(end()),rend()即container::reverse_iterator(begin())。
2、insert迭代器
不能改变insert迭代器的位置:++iter和iter--都无实际操作;*iter无实际操作(传回iter);iter = value:安插value。(因此*iter=value等价于iter=value)
用法举例:
back_inserter(coll) = 30; //将30插入容器
或者back_insert_iterator<vector<int> > iter(coll); *iter=1; *iter=2; //分别将1、2插入coll
3、流迭代器
注意1:两个istream迭代器相等的条件:两者都是end-of-stream迭代器,或者两者都可以进行读取操作并指向相同的stream。
注意2:对于istream_iterator<int> cinPos(cin);调用advance(cinPos, n);,若n过大,则cinPos与istream<int>()相等。
7.5 迭代器特性(iterator traits)
typename std::iterator_traits<T>::value_type可以取代迭代器T的元素数值类型。
std::iterator_traits<T>::iterator_category();返回迭代器T的迭代器标志(iterator tag(是一个结构体)),如output_iterator_tag, input_iterator_tag ,forward_iterator_tag(继承自input_iterator_tag), bidirectional_iterator_tag(继承自forward_iterator_tag), random_access_iterator_tag(继承自bidirectional_iterator_tag)。
这样,可以为迭代器编写泛型函数。
- 7 STL迭代器
- STL迭代器
- STL迭代器
- STL-迭代器
- STL迭代器
- STL 迭代器
- STL迭代器
- STL 迭代器
- STL--迭代器
- STL 迭代器
- STL迭代器
- STL 迭代器
- STL 迭代器
- STL 迭代器
- STL迭代器
- STL:迭代器
- STL 迭代器
- STL迭代器
- 八皇后问题 递归求解
- 机器学习方面顶级会议
- python print 错误 ( invalid syntax)
- (一)线性结构之ArrayList的实现
- Android 圆角效果
- 7 STL迭代器
- 实战Linux Shell(2):布署Bash Shell 的环境
- 二叉树的遍历 不知道哪里有问题 求指点
- 设计模式学习之command模式
- 二叉树
- Android源代码分析(一) 目录结构分析
- 传输层
- [Unity3D]在Unity3D中实现简单的碰撞检测
- 2013年最新的24款jquery插件