【C++ 11 -17】之迭代器的简介

【C++ 11 -17】之迭代器的简介

一、迭代器 vector 的简介

迭代器是一种遍历容器内元素的 数据类型,这种数据类型有点像指针,我们理解的时候就理解为迭代器用来指向容器中的某个元素。string,vector,[],很少用[],更常用的访问方式就是迭代器(更通用)。通过迭代器,我们就可以读容器中的原始值,读string中的每个字符,还可以修改某个迭代器所指向的元素值。++ ,-- list map ,尽量学会用迭代器来访问容器中的元素。

二:容器的迭代器类型

vector<int> iv = { 100,200,300 };
vector<int>::iterator iter;//定义迭代器,也必须是vector<int>

    大家在理解的时候,就把整个的 vector<int>::iterator 理解成一个类型,这种类型就专门应用于迭代器。
    当我们用这个类型定义一个变量的时候,这个变量就是迭代器,这里iter这个变量就是迭代器。

 三:迭代器begin()/end()操作,反向迭代器rbegin()/rend()操作

  •  begin()/end()用来返回迭代类型。
  • rebegin()/rend()用来返回 迭代类型

   begin()返回一个迭代器类型(大家就理解成返回一个迭代器);

iter = iv.begin();//如果容器中有元素,则begin()返回迭代器,指向的是容器中的第一个元素。
                  //相当于 iter指向了iv[0];

 end():返回一个迭代器类型(大家就理解成返回一个迭代器)

iter = iv.end();//end返回的迭代器指向并不是末端元素。而是末端元素的后边,拿这个后边怎么理解?
                //我们就理解成end()指向的是一个不存在的元素。

如果迭代器为空,那么迭代器begin和end()返回的迭代器就相同

    vector<int> iv2;
    vector<int>::iterator iterbegin = iv2.begin();
    vector<int>::iterator iterend = iv2.end();
    if (iterbegin == iterend)
    {
        cout << "容器v2为空" << endl;
    }

 迭代器遍历for语句

vector<int> iv = { 100,200,300 };//定义一个容器
for (vector<int>::iterator iter = iv.begin();iter!= iv.end();iter++)
{
   cout << *iter << endl;//100,200,300
}
//反向迭代器:大家想从后往前遍历一个容器,那么反向迭代器就比较方便。
//反向迭代器(逆向迭代器)用的rbegin()/rend();
//rbegin():返回一个反向迭代器,指向反向迭代器的第一个元素;
//rend():返回一个反向迭代器,指向反向迭代器最后元素的下一个位置。
 
for (vector<int>::iterator riter = iv.rbegin(); riter != iv.rend(); riter++)
{
  cout << *riter << endl;//300,200,100
}


四、迭代器运算符


    //a) *iter:返回迭代器iter所指向元素的引用。必须要保证这个迭代器指向的是有效的元素容器
    //不能指向end(),因为end()是末端元素的后边。就是end()指向的是一个不存在的元素。
    vector<int> iv3 = {100,200,300};
    vector<int>::iterator iter = iv3.begin();
    cout << *iter << endl;//正确
 
    vector<int>::iterator iter = iv3.end();
    cout << *iter << endl;//异常 段错,内存错误
 
 
    //b)++iter:iter++:让迭代器指向容器中下一个元素;已经指向end()的时候不能再++;
    vector<int> iv4 = { 100,200,300 };
    vector<int>::iterator iter = iv4.end();
    //iter++;
    ++iter;
    cout << *iter << endl;//程序错误终止,异常终止
    vector<int>::iterator iter = iv4.begin();
    //iter++;
    ++iter;
    cout << *iter << endl;//正常 200
 
    //c) --iter和iter--:让迭代器指向容器中的上一个元素。指向开头元素,就不能再--
    vector<int>::iterator iter = iv4.begin();
    //iter--;
    //cout << *iter << endl;//错误终止
    vector<int>::iterator iter = iv4.end();
    iter--;
    cout << *iter << endl;//300 正确

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值