C++中的迭代器用法总结。
对于一个容器的遍历,可以用 for 循环,如下:
1 | vector<string> v; |
也可以用迭代器。
迭代器:是一种对容器的遍历工具。
迭代器用起来是指针使用,在内部,不同的容器有不同的实现方式,不一定是原生指针。
迭代器:正向迭代器、反向迭代器、const迭代器。
迭代器的函数:
1 | begin() |
C++11 正向、反向有了一些新功能。
正向迭代器
1 | vector<string>::iterator vit = v.begin(); |
反向迭代器
1 | vector<string>::reverse_iterator rit = v.rbegin(); |
const 迭代器
1 | vector<string>::const_iterator cvit = v.begin(); |
C++11 语法糖 auto
在写代码的时候编译器智能提示,让把迭代器改成 auto:
1 | auto avit = v.begin(); |
语法糖 auto 用于 for 循环
1 | string str = "abcd"; |
感觉尝不到甜头,来一个🌰,感受下:
1 | std::map<std::string, std::vector<std::string>> strVMap; |
好吧,其实用了 auto 编译器编译后也会成迭代器的形式,这个 Java 里的增强 for 也是。
为什么要出现迭代器
在 STL 中有很多容器,容器实现的方式是一些不同的数据结构,如果我们要遍历这些容器中的内容,就需要注意一些细节问题(比如单链表的遍历,从后往前遍历,等等的细节问题)。
迭代器用一种统一的方式来访问容器,不用关心具体的访问细节(屏蔽掉了底层复杂的结构细节)。