C++迭代器(iterator)
2021/7/30 20:36:12
本文主要是介绍C++迭代器(iterator),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
什么是迭代器
迭代器是一种可以遍历容器元素的数据类型。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。C++更趋向于使用迭代器而不是数组下标操作,因为标准库为每一种标准容器(如vector、map和list等)定义了一种迭代器类型,而只有少数容器(如vector)支持数组下标操作访问容器元素。可以通过迭代器指向你想访问容器的元素地址,通过*x打印出元素值。这和我们所熟知的指针极其类似。
C语言有指针,指针用起来十分灵活高效。
C++语言有迭代器,迭代器相对于指针而言功能更为丰富。
vector,是数组实现的,也就是说,只要知道数组的首地址,就访问到后面的元素。所以,我们可以通过访问vector的迭代器来遍历vector容器元素。
List,是链表实现的,我们知道,链表的元素都存储在一段不是连续的地址空间。我们需要通过next指针来访问下一个元素。那么,我们也可以通过访问list的迭代器来遍历list容器元素。
迭代器和容器时密不可分的。不同的容器,它们的迭代器也是不同的,但是它们的迭代器功能是一样的。假如没有迭代器,由于vector和list容器的存储特点,你需要两种算法去实现遍历vector和list容器的功能。有了迭代器,遍历容器的效率会大大提高。
迭代器的使用
容器都有成员begin和end,其中begin成员复制返回指向第一个元素的迭代器(用*迭代器打印出元素值),而end成员返回指向容器尾元素的下一个位置的迭代器,它是一个不存在的元素位置。
假如你想遍历容器(vector)元素时,一般这样写
for( it = vector.begin(); it != vector.end(); it++ ) cout<<*it<<endl;
vector容器的迭代器定义
std::vector<int> ::iterator it; //it能读写vector<int>的元素 std::vector<int>::const_iterator it;//it只能读vector<int>的元素,不可以修改vector<int>中的元素
map容器的迭代器定义
map<char,string>::iterator it; //it能读写map<char,string>的元素 map<char,string>::const_iterator it;//it只能读map<char,string>的元素,不可以修改map<char,string>中的元素
list容器的迭代器定义
list<int>::iterator it; //it能读写list<int>的元素 list<int>::const_iterator it;//it只能读list<int>的元素,不可以修改list<int>中的元素
vector迭代器定义时,前面必须使用命名空间std,否则会报错。而其他的容器(map、list)有没有命名空间std都不会报错。
不同容器的迭代器的功能
vector 随机访问
deque 随机访问
list 双向
set / multiset 双向
map / multimap 双向
stack 不支持迭代器
queue 不支持迭代器
priority_queue 不支持迭代器
这篇关于C++迭代器(iterator)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版