迭代器运算

vector和string迭代器支持的运算
iter + n迭代器加上一个整数仍得一个迭代器,迭代器指示的新位置与原来相比向前移动了若干个元素。结果迭代器或者指示容器内的一个元素,或者指示容器尾元素的下一个位置
iter - n迭代器减去一个整数仍得一个迭代器,迭代器指示的新位置与原来相比向后移动了若干个元素。结果迭代器或者指示容器内的一个元素,或者指示容器尾元素的下一个位置
iter1 += n迭代器加法的复合赋值语句,讲iter1加n的结果赋给iter1
iter1 -= n迭代器减法的复合赋值语句,讲iter2减n的结果赋给iter1
iter1 - iter2两个迭代器相减的结果是它们之间的距离,也就是说,讲运算符右侧的迭代器向前移动差值个元素后得到左侧的迭代器。参与运算的迭代器必须指向的是同一个容器中的元素或者尾元素的下一个位置
>、>=、<、<=迭代器的关系运算符,如果某迭代器指向的容器位置在另一个迭代器所指位置之前,则说前者小于后者。参与运算的两个迭代器必须指向的是同一个容器中的元素或者尾元素的下一位置

迭代器的算数运算

 vector对象中间位置的元素:

    //计算得到最接近vi中间元素的一个迭代器
    auto mid = vi.begin() + vi.size()/2;

参与比较的两个迭代器必须合法而且指向的是同一个容器的元素,it和mid是同一个vector对象的两个迭代器,比较它们所指位置孰前孰后:

    if(it<mid)
        //处理vi前半部分的元素

两个迭代器指向的是同一个容器中的愿随或者尾元素的下一个位置,相减所得是两个迭代器的距离。

距离指的是右侧的迭代器向前移动多少位置就能追上左侧的迭代器,其类型是名为difference_type的带符号整型数。

使用迭代器运算

二分搜索:

    //text必须是有序的
    //beg和end表示我们搜索的范围
    auto beg = text.begin(), end = text.end();
    auto mid = text.begin() + (end - beg) / 2;//初始状态下的中间点
    //当还有元素尚未检查并且我们还没有找到sought时执行循环
    while (mid != end && *mid !=sought)
    {
        if (sought < *mid)//我们要找的元素在前办部分吗?
            end = mid;//如果是,调查搜索范围使得忽略掉后半部分
        else//我们要找的元素在后半部分
            beg = mid + 1;//在mid之后寻找
        mid = beg + (end - beg) / 2;//新的中间点
    }

 

转载于:https://www.cnblogs.com/suomeimei/p/10831007.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值