概述
什么是迭代器(iterator)
迭代器(iterator)是一种可以遍历容器元素的数据类型。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。C++更趋向于使用迭代器而不是数组下标操作,因为标准库为每一种标准容器(如vector、map和list等)定义了一种迭代器类型,而只有少数容器(如vector)支持数组下标操作访问容器元素。可以通过迭代器指向你想访问容器的元素地址,通过*x打印出元素值。这和我们所熟知的指针极其类似。
C语言有指针,指针用起来十分灵活高效。
C++语言有迭代器,迭代器相对于指针而言功能更为丰富。
vector,是数组实现的,也就是说,只要知道数组的首地址,就能访问到后面的元素。所以,我们可以通过访问vector的迭代器来遍历vector容器元素。
List,是链表实现的,我们知道,链表的元素都存储在一段不是连续的地址空间中。我们需要通过next指针来访问下一个元素。那么,我们也可以通过访问list的迭代器来实现遍历list容器元素。
由此可见,迭代器和容器是密不可分的、紧密相连的的关系。不同的容器,它们的迭代器也是不同的,但是它们的迭代器功能是一样的。假如没有迭代器,由于vector和list容器的存储特点,你需要两种算法去实现遍历vector和list容器的功能,复杂且低效。有了迭代器,遍历容器的效率会大大提高。
迭代器(iterator)的使用
容器都有成员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>中的元素
当然,也可以逆序迭代!
for( std::vector<int>::reverse_iterator it = v.rbegin(); it!=v.rend();it++ )
cout<<*it<<endl;
std::也可以没有,因为前面应经给出来了
using namespace std;
其他容器用法类似!
下面是以vector容器为例的C++代码,仅供参考
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
//要使用的vector容器应该位于所有定义容器语句的最后一句,应在1而不是2
vector<int> c; //1
vector<int> vector;
//2
vector.push_back(1);//插入尾部
vector.push_back(9);
vector.push_back(5);
sort(vector.begin(),vector.end());
for( int i=0; i<vector.size(); i++ )
cout<<"sort_result: "<<vector[i]<<endl;
cout<<"头部元素为:"<<vector.front()<<endl;//头部元素
cout<<"尾部元素为:"<<vector.back()<<endl;//尾部元素
cout<<"容器尺寸大小为:"<<vector.size()<<endl;//容器尺寸大小
vector.front()=11;//修改容器头部元素值
vector.back()= 15;//修改容器尾部元素值
cout<<"修改后头部元素为:"<<vector.front()<<endl;//头部元素
vector.pop_back();//删除尾部元素
cout<<"修改+删除后尾部元素为:"<<vector.back()<<endl;//尾部元素
vector.push_back(16);
for( int i=0; i<vector.size(); i++ )
cout<<"用数组输出vector["<<i<<"]:"<<vector[i]<<endl;
std::vector<int>::const_iterator it;
for( it = vector.begin(); it != vector.end(); it++ )
cout<<"用迭代器输出:"<<*it<<endl;
vector.insert(vector.begin(),100);//插入开始位置
for( int i=0; i<vector.size(); i++ )
cout<<"insert_result:"<<vector[i]<<endl;
cout<<"头部元素为:"<<vector.front()<<endl;
return 0;
}
运行结果
sort_result: 1
sort_result: 5
sort_result: 9
头部元素为:1
尾部元素为:9
容器尺寸大小为:3
修改后头部元素为:11
修改+删除后尾部元素为:5
用数组输出vector[0]:11
用数组输出vector[1]:5
用数组输出vector[2]:16
用迭代器输出:11
用迭代器输出:5
用迭代器输出:16
insert_result:100
insert_result:11
insert_result:5
insert_result:16
头部元素为:100
--------------------------------
Process exited after 0.02426 seconds with return value 0
请按任意键继续. . .
不同容器的迭代器(iterator)的功能
vector 随机访问
deque 随机访问
list 双向
set / multiset 双向
map / multimap 双向
stack 不支持迭代器
queue 不支持迭代器
priority_queue 不支持迭代器
最后
以上就是无私向日葵为你收集整理的C++迭代器(iterator)什么是迭代器(iterator)迭代器(iterator)的使用下面是以vector容器为例的C++代码,仅供参考运行结果不同容器的迭代器(iterator)的功能的全部内容,希望文章能够帮你解决C++迭代器(iterator)什么是迭代器(iterator)迭代器(iterator)的使用下面是以vector容器为例的C++代码,仅供参考运行结果不同容器的迭代器(iterator)的功能所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复