C++学习第七天:迭代器
2014-06-01 16:40
218 查看
C++学习第七天:迭代器
迭代器:iterator。 C++标准库中的集合类(容器)都定义了相应的迭代器类型,只有少数的集合类(容器)支持下标操作 容器的iterator类型,每种容器都定义有自己的迭代器,例如 vector<int>::iterator iter; 定义一个名为iter的变量,该变量的数据类型是由vector<int>定义的iterator类型,其实也就是iterator是一个指针,该指针指向vector<int>的对象。 容器都定义了一对命名为begin和end的函数,用于返回迭代器。 begin()返回的是去容器的第一个元素,end()返回并不指向vector中任何实际的元素,相反,它只是其一个哨兵的作用 ,表示已到元素的末尾(java使用hasNext()方法判断是否还有下一个元素)。 迭代器访问容器中的元素,使用*操作符,其实也就是取值操作。例如: vector<int>::iterator iter=ivec.begin(); //指向第一个元素 *iter=0; //访问迭代器指向的元素,并赋值 C++迭代器支持自增操作,也就是++iter表示指向下一个元素(java的迭代器使用next()方法指向下一个元素)。 迭代器可以执行的操作就是比较操作: == 和 != 例如: //遍历一个容器(集合) for(vector<int>::iterator iter=ivec.begin();iter != ivec.end();++iter){ *iter.... //访问元素 } 使用const_iterator返回只读的迭代器(相当于指向常量的指针),只能读取元素的值,不能改变元素的值。 特别注意与 const iterator区别开来,const iterator是常量迭代器(常指针,一旦指向某个对象,则始终指向这个对象)例如: const_iterator:指向常量的指针 for(vector<string>::const_iterator iter=text.begin();iter!=text.end();++iter){ //*iter=3 //修改元素的值将会报错,相当于给常量赋值 cout<<*iter<<endl; //正常访问元素 } const iterator:常指针 vector<int> nums(10); const vector<int>::iterator cit=nums.begin(); *cit=1; //下面这句代码报错cit不能指向其他元素 //++cit; 迭代器的算术操作: +或- n个位置:iter+n在该迭代器之前(之后)的第n个元素的位置,其中n必须是容器的size_type类型或difference_type类型。 iter1-iter2:计算两个迭代器对象的距离,该距离是名为difference_type的signed类型的值,这里的difference_type类型类似于size_type类词那个。 例如直接定位于容器对象的中间元素 vector::iterator mid=vi.begin()+vi.size()/2; //两个迭代器的相加操作是未定义的,所以下面这句代码报错。 //vector::iterator mid=(vi.begin()+vi.end())/2;
int main(){ /* //使用iterator遍历容器的元素 vector<int> ievc(10,33); for(vector<int>::iterator iter=ievc.begin();iter!=ievc.end();++iter){ *iter*=2; cout<<*iter<<" "; } */ //测试const_iterator于const iterator 的区别 vector<int> ievc(10,33); for(vector<int>::const_iterator iter=ievc.begin();iter!=ievc.end();++iter){ //尝试修改它的值。编译报错 //*iter=2; cout<<*iter<<" "; } //const iterator const vector<int>::iterator consit=ievc.begin(); //尝试修改它的值,正常运行 *consit=3; //尝试指向下一个元素,编译报错 // ++consit; return 0; }
相关文章推荐
- C++学习笔记(三) 迭代器
- c++学习笔记--C++Primer第4版--迭代器iterator
- apue学习第七天(1)——# in C/C++(C/C++中的井号)
- C++学习笔记28——泛型算法之iostream迭代器
- C++ primer 学习笔记——迭代器
- C++精华(STL)学习笔记之迭代器
- C++ 迭代器容器学习
- C++ STL源码学习(迭代器篇)
- c++学习笔记(七):再谈迭代器
- C++学习笔记(五)迭代器iterator
- C++迭代器学习笔记
- C++学习之深入理解迭代器——迭代器特性、迭代器标志-iterator_traits
- C++学习之迭代器
- c++学习笔记之迭代器
- C++学习之deque底层存储结构与迭代器失效情况
- 【C++ STL学习之八】逆向迭代器reverse_iterator
- C++学习之迭代器失效总结
- 【C++ STL学习之八】逆向迭代器reverse_iterator
- c++ primer 学习笔记(2)迭代器
- C++学习基础三——迭代器基础