资料来源:《C++ Primer》、博客随笔
一、什么是迭代器
- 迭代器是一种检查容器内元素并遍历元素的数据类型
- 是 C++ 程序中常用的一种设计模式,它最重要的作用是为访问容器提供了统一的接口。
- 我们希望容器提供一个访问元素的统一接口,从而复用操作函数,这个接口就是迭代器
- C++ STL 有许多容器,例如 string、vector、list、deque、map、unordered_map
介绍始终是介绍,所以下面的内容仅限于string与vector的基础知识,其他的以后再单独开贴总结。
二、使用迭代器
使用迭代器可以访问某个容器里的某个元素,迭代器也能从一个元素移动到另一个元素,类似指针,提供了对对象的间接访问。
auto b = v.begin(), e = v.end(); //让b表示v的第一个元素,e表示v的尾元素的下一位置
//end成功返回的迭代器被称作尾后迭代器
//如果v为空,那么begin跟end返回同一个迭代器
//上面的例子没有实际意义,只是为了让我们理解简单的迭代器是什么含义
(1)迭代器运算符
*iter 返回迭代器iter所指元素的引用
解引用(*)的迭代器必须是合法并确实指着某个元素的,试图解引用一个非法迭代器或者尾后迭代器都是未被定义行为
iter ->mem 解引用iter并获取该元素名为mem的成员,等价于(*iter).mem
++iter 令iter指示容器中的下一个元素
--iter 令iter指示容器中的上一个元素
iter1 == iter2 判断两个迭代器是否相等(不想等),如果两个迭代器指示的是同一个元素或者他们是同一个容器 iter1 != iter2 的尾后迭代器,则相等;反之,不相等
//例子:将第开头第一个字母改为大写字母
string s("badbaye!");
if( s.begin() != s.end() ) //遍历整个字符串,确保s非空
{
auto it = s.begin(); //将第一个字符赋值给it
*it = toupper(*it); //将当前第一个字符改为大写
}
(2)将迭代器从一个元素移动到另外一个元素
迭代器使用递增(++)运算符,从一个元素移动到下一个元素。简单来说跟整数递增类似,整数是在基础上加1,而迭代器是向前移一