C++之iterator(迭代器)学习

        迭代器是一种检查容器内元素并便利元素的数据类型,迭代器可以很大程度上隔离容器底层实现,使用时只需依赖迭代器相对统一的方法/接口。Iterator类的访问方式就是把不同集合类的访问逻辑抽象出来,使得不用暴露集合内部的结构而达到循环遍历集合的效果。

  1 容器的Iterator类型

   vector<int>::iterator iter;  定义一个名为iter的变量,数据类型是vector<int>定义的iterator类型。

  迭代器和迭代器类型的区别?

   iterator表述两种事物,一般指的是迭代器的概念;而具体指的是vector定义的具体iterator类型,如vector<int>

   若一种类型支持一组确定的操作,则称这种类型为迭代器。

   每个容器都定义了iterator类型,而这种类型支持迭代器的各种操作。

     2 begin和end操作(返回的是迭代器类型)

       vector<int> ivec;

       vector<int>::iterator iter = ivec.begin();

       vector<int>::iterator iter1 = ivec.end();

        begin指向第一个元素,即ivec[0]

        end指向末端元素的下一个,指向一个不存在的元素。(启动一个哨兵的作用)

        若vector为空,begin和end返回的迭代器相同。

      3 基本操作

          *iter = 0;  等价于  ivec[0] = 0

           ++iter  指向iter的下一个元素

           可以使用== 或 != 比较两个迭代器是否相同

         for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)   *iter = 0;   等价于

         for (vector<int>::size_type ix= 0; ix != ivec.size(); ix++)   ivec[ix]= 0; 

  3 const_iterator

  (1) vector<int>::const_iterator iter 表示指向的值为常量,iter可移动指针

     const vector<int>::iterator iter 表示指针为常量,不可移动指针,可修改其值

 (2)算术操作

   iter+n   iter-n  表示迭代器向前或向后移动迭代器

   iter1-iter2  计算两个迭代器的距离

   vector<int>::iterator mid = vi.begin() + vi.size()/2  计算中间元素

   可通过end和begin函数计算容器的大小,如下

    vector<int>::size_type size =  str.end() - str.begin();
     cout << size << endl;

   vector<int>::iterator mid = (vi.begin() + vi.end())/2  编译报错,两个地址不允许做加法和除法

  

example:

#include <vector>
#include <iostream>

using namespace std;
using std::vector;


int main()
{
    string word;
    vector <string> str(3);
    str[0] = "aaa";
    str[1] = "bbb";
    str[2] = "ccc";

    vector<string>::iterator mid = str.begin() + str.size()/2;
    cout << *mid << endl;
    str.push_back("ddd");
    str.push_back("eee");
    str.push_back("fff");
    vector<string>::iterator mid2 = str.begin() + str.size()/2;
    cout << *mid2 << endl;
    
    return 0;

}

[root@iZwz9a9kyixoqvys89ewj4Z vector]# ./a.out 
bbb
ddd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值