迭代器介绍
2015-04-23 18:44
127 查看
我们知道可以使用下标运算符来访问string对象的字符或vector对象的元素,还有一种更通用的机制也可以实现同样的目的,这就是迭代器
1. 迭代器的使用
获取迭代器不是使用取地址符,而是具有迭代器的类型同时会拥有返回迭代器的成员。比如:begin和end,其中begin成员负责返回指向第一个元素的迭代器,end成员负责返回指向容器尾元素的下一位的迭代器,也就是说,该迭代器自带的元素是一个本不存在的“尾后”元素,这样的迭代器仅作为一个标记,表示我们已经处理完容器中的所有元素。如果容器为空,则begin和end返回的是同一个迭代器,即尾后迭代器!
迭代器的运算符
注意:执行解引用的迭代器必须合法并确实指示着某个元素
示例:将字符串的第一个字母大写!
示例:将字符串的第一个单词改为大写
迭代器的类型
就像不知道string和vector的size_type成员到底是什么类型一样,一般来说我们也不知道迭代器的精确类型。而实际上,那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型:
迭代器的运算
至此,迭代器的介绍结束!
1. 迭代器的使用
获取迭代器不是使用取地址符,而是具有迭代器的类型同时会拥有返回迭代器的成员。比如:begin和end,其中begin成员负责返回指向第一个元素的迭代器,end成员负责返回指向容器尾元素的下一位的迭代器,也就是说,该迭代器自带的元素是一个本不存在的“尾后”元素,这样的迭代器仅作为一个标记,表示我们已经处理完容器中的所有元素。如果容器为空,则begin和end返回的是同一个迭代器,即尾后迭代器!
迭代器的运算符
*iter //返回迭代器iter所指元素的引用 iter->men //解引用iter并获取该元素的名为men的成员,等价于(*iter.men) ++iter //令迭代器指向容器中的下一个元素 iter1==iter2 //判断两个迭代器是否相等
注意:执行解引用的迭代器必须合法并确实指示着某个元素
示例:将字符串的第一个字母大写!
string s("some string"); if(s.begin() !=s.end()) { auto it=s.begin(); *it=toupper(*it); }
示例:将字符串的第一个单词改为大写
string s("some string"); for(auto it=s.begin();it !=s.end() && !isspace(*it);++it) *it=toupper(*it);
迭代器的类型
就像不知道string和vector的size_type成员到底是什么类型一样,一般来说我们也不知道迭代器的精确类型。而实际上,那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型:
vector<int>::iterator it; string::iterator it2;结合解引用和成员访问操作:
(*it).emty()
it->empty(); //这两种方式实现的效果是相同的注意:任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。
迭代器的运算
iter + n iter+=n iter1-iter2 iter1<iter2迭代器可以实现类似的运算功能
至此,迭代器的介绍结束!
相关文章推荐
- 迭代器简单介绍
- C++学习篇——C++ STL中迭代器介绍(收集)
- vector,list,deque容器的迭代器简单介绍
- 迭代器之入门介绍(上)
- 迭代器之入门介绍(中)
- C++ 迭代器 基础介绍
- Lua中的迭代器和泛型for介绍
- 标准库容器 vector 和 迭代器 iterator 的简单介绍
- STL之迭代器的类型介绍
- 迭代器介绍
- C++ 有关于STL中 迭代器的基本介绍 20180321day11
- Java集合类3—迭代器和Collections类介绍
- 泛型算法 (输入输出迭代器和算法综合介绍)
- 12.22 随机数 列表排序 匿名函数和迭代器生成器的介绍应用
- 迭代器的使用方法简要介绍(摘自C++Primer)
- C++学习篇——C++ STL中迭代器介绍
- 《C++ Primer》学习笔记:迭代器介绍
- C++学习篇——C++ STL中迭代器介绍
- 2、 001 Iterator迭代器介绍