[STL基础]Iterator迭代器
来源:互联网 发布:sql 2012 创建触发器 编辑:程序博客网 时间:2024/05/17 23:38
迭代器基本操作
- 用于指向第一类容器(顺序容器(vector,deque,list)和关联容器(set,multiset,map,multimap))中的元素。有const和非const两种
- 通过迭代器可以读取它指向的元素,通过非const迭代器还能修改其指向的元素。迭代器用法和指针类似
- 定义一个容器类的迭代器的方法可以使:容器类名::iterator 变量名;或容器类名::const_iterator 变量名
- 访问一个迭代器指向的元素:*迭代器变量名
- 迭代器上可以执行++操作,一指向容器中的下一个元素。如果迭代器到达了容器中的最后一个元素的后面,则迭代器变成past-the-end值
- 使用一个past-the-end值的迭代器来访问对象是非法的,就好像使用NULL或为初始化的指针一样
#include <string>#include <vector> #include <conio.h>#include<iostream>using namespace std; void test0(){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); vector<int>::const_iterator i;//常量迭代器 for(i=v.begin();i!=v.end();i++) cout<<*i<<",";//1,2,3,4, //访问迭代器所指向的元素 cout<<endl; vector<int>::reverse_iterator r;//反向迭代器 for(r=v.rbegin();r!=v.rend();r++) cout<<*r<<",";//通过非const迭代器来修改其指向的元素 cout<<endl;//4,3,2,1, vector<int>::iterator j;//非常量迭代器 for(j=v.begin();j!=v.end();j++) *j=100; for(j=v.begin();j!=v.end();j++) cout<<*j<<",";//100,100,100,100, cout<<endl;}void Test(char h){ cout<<"press key===="<<h<<endl; switch(h) { case '0': test0();break;// case '1': test1();break; case 27: case 'q':exit(0);break; default:cout<<"default "<<h<<endl;break; }}void main(){ while(1) { Test(getch()); } }
迭代器功能
不同容器上支持的迭代器功能强弱有所不同,容器的迭代器的功能强弱,决定了该容器是否支持STL中的某种算法。eg:只有第一类容器能用迭代器遍历;排序算法需要通过随机迭代器来访问容器中的元素,那么有的容器就不支持排序算法。
1.输入迭代器
input iterator
1.输出迭代器
output iterator
2.正向迭代器
forward iterator
3.双向迭代器
bidirectional iterator
4.随机访问迭代器
random access iterator
功能描述提供对数据的只读访问提供对数据的只写访问提供读写操作,并能一次一个地向前移动提供读写操作,并能一次一个地向前或向后移动提供读写操作,并能在数中随机的移动不同迭代器所能进行的操作*p,p1=p,p(==/!=)p1
++p,p++
*p,p=p1
++p,p++
*p,p1=p,p=p1,p(==/!=)p1,
++p,p++
*p,p1=p,p=p1,p(==/!=)p1,
(++/--)p,p(++/--)
*p,p1=p,p=p1,p(==/!=)p1,(++/--)p,p(++/--),p(>/<)p1,p(<=/>=)p1
p(+/-)i:返回指向p后/前面的第i个元素的迭代器
容器的迭代器分类 list,set/multiset,map/multimapvector,deque注:1.编号大的迭代器拥有编号小的迭代器的所有功能,能当做编号小的迭代器使用
2.stack,queue,priority_queue不支持迭代器
#include <list>#include <vector> #include <conio.h>#include<iostream>using namespace std; void test1(){ //vector的迭代器是随机迭代器,所以遍历vector有好几种 int ar[]={1,2,3,4}; vector<int> v(ar,ar+4); vector<int>::value_type i;//等效于些int i; for(i=0;i<v.size();i++) cout<<v[i];//1234 cout<<endl; vector<int>::const_iterator ii; for(ii=v.begin();ii!=v.end();ii++) cout<<*ii;//1234 cout<<endl; ii=v.begin(); while(ii<v.end()) { cout<<*ii;//13 ii=ii+2; } cout<<endl; //而list的迭代器是双向迭代器 list<int> lt(ar,ar+4); list<int>::const_iterator jj=lt.begin(); while(jj!=lt.end())//若改成while(jj<lt.end())则编译会出问题,因为双向迭代器不支持< { cout<<*jj;//1234 jj++;//如写成jj=jj+1;则会出现编译错误,因为双向迭代器不支持返回指向jj的后面的第1个元素的迭代器。当然更不用谈:jj=jj+2; } cout<<endl; for(int i=0;i<lt.size();i++) ;//cout<<lt[i];//双向迭代器不支持[]}void Test(char h){ cout<<"press key===="<<h<<endl; switch(h) { case '1': test1();break; case 27: case 'q':exit(0);break; default:cout<<"default "<<h<<endl;break; }}void main(){ while(1) { Test(getch()); } }
官网实例
- [STL基础]Iterator迭代器
- STL的迭代器--Iterator
- STL的迭代器--Iterator
- STL之iterator(迭代器)
- STL iterator(迭代器)
- stl之迭代器(iterator)
- STL Iterator 迭代器
- STL迭代器(iterator)
- STL----iterator 迭代器
- 【STL】反向迭代器(Reverse Iterator)
- C++ stl之迭代器(iterator)
- 【STL】反向迭代器(Reverse Iterator)
- 【C++ STL系列】迭代器 iterator
- STL iterator迭代器的使用
- 【STL】反向迭代器(Reverse Iterator)
- STL iterator
- STL-iterator
- 设计模式之iterator模式到STL中iterator迭代器
- poj 3278 -- Catch That Cow (最短路)
- poj 2323 -- PERMS (dp)
- delphi技术专题---获取网卡物理地址之TLanaENum结构步骤学习分享
- HTTP header头文件标头
- ACE自适配通信环境中文技术文档(中篇:ACE程序员教程)Reactor实例
- [STL基础]Iterator迭代器
- poj 3176 -- Cow Bowling (dp)
- 几种任务调度的 Java 实现方法与比较
- 移动游戏 请别迷信“一夜之间”
- 谈黑马基础题之--java证明return是在finally执行后才返回的,且在finally无法改变返回值
- JAVA数组介绍
- OpenFlashChart简明手册
- CAP原理和BASE思想 ACID模型
- linux下终端使用代理