【摘要】

迭代器是STL中重要的一支,prev和distance是其基本方法。distance方法十分简单,就不在此赘述,现主要对prev方法以及其相关方法——advance方法作简要介绍与使用说明,并在文末附上代码示例。

【Advance 方法】

Advance iterator

Advances the iterator it by n element positions.
If it is a random-access iterator, the function uses just once operator+ or operator-. Otherwise, the function uses repeatedly the increase or decrease operator (operator++ or operator--) until n elements have been advanced.

advance迭代器就是将迭代器it,移动n位。如果it是随机访问迭代器,那么函数进行1次运算符计算操作,否则函数将对迭代器进行n次迭代计算操作。
代码示例

// advance example
#include <iostream>     // std::cout
#include <iterator>     // std::advance
#include <list>         // std::listint main () {std::list<int> mylist;for (int i=0; i<10; i++) mylist.push_back (i*10);std::list<int>::iterator it = mylist.begin();std::advance (it,5);std::cout << "The sixth element in mylist is: " << *it << '\n';// 输出 50return 0;
}

解析

注意,移动5次,输出的是第6个元素而不是第5个元素。

【Prev 方法】

Get iterator to previous element

Returns an iterator pointing to the element that it would be pointing to if advanced -n positions.

If it is a random-access iterator, the function uses just once operator+ or operator-. Otherwise, the function uses repeatedly the increase or decrease operator (operator++ or operator--) on the copied iterator until n elements have been advanced.

如果是随机访问迭代器,就只执行一次运算符操作(+或-),否则,执行n次持续的递减或递增操作。

代码示例

#include <iostream>     // std::cout
#include <iterator>     // std::advance
#include <list>         // std::list
#include <algorithm>int main () {std::list<int> mylist;for (int i=0; i<10; i++) mylist.push_back (i*10);//std::cout<<*upper_bound(mylist.begin(), mylist.end(), 100)<<std::endl;// 抛出异常std::cout<<*lower_bound(mylist.begin(), mylist.end(), 0)<<std::endl;// 输出 0std::cout<<*prev(upper_bound(mylist.begin(), mylist.end(), 100))<<std::endl;// 输出 90
  std::cout<<*prev(++upper_bound(mylist.begin(), mylist.end(), 90))<<std::endl;// 抛出异常
//std::cout<<*prev(lower_bound(mylist.begin(), mylist.end(), 0))<<std::endl;// 抛出异常return 0;
}

解析

prev在VC6.0之中不能实现,在VS2010之中可以实现。实际实现的操作是将迭代器递减一个单位长度而已,并未见所谓的递增操作或者根据是否作为随机迭代器时的一次或者n次操作!

【复盘】

详见:LeetCode 之 Search for a Range(查找)

详址:http://blog.csdn.net/u013630349/article/details/47099915

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {const int l = distance(nums.begin(), lower_bound(nums.begin(), nums.end(), target));const int u = distance(nums.begin(), --upper_bound(nums.begin(), nums.end(), target));if (nums[l] != target) // not foundreturn vector<int> { -1, -1 };elsereturn vector<int> { l, u };}
};

解析:

源码验证AC,只是在原来基础上将 “prev(... )”改为  “--(... )”。

C++ STL 迭代器方法 之 advance与prev 方法 浅析相关推荐

  1. STL — 迭代器设计思维(一)

    迭代器设计思维 关于迭代器的基础原理和作用我以前有一个博客提到过:STL迭代器的原理以及迭代器失效 我不推荐不够了解迭代器的读者直接来看这个 博客,因为你会觉得我在做一些无意义的事情,并且理解上面也会 ...

  2. stl clocklist 查找元素_剑指信奥 C++ 之 STL 迭代器(上)

    趣乐博思剑指信奥 C++ 系列 ❝ 趣乐博思剑指信奥系列,专门针对全国青少年信息学奥林匹克联赛 NOIP 而开展的专业教育方案.开设的课程有 C 语言基础,C++ 语言基础,算法设计入门与进阶,经典试 ...

  3. 有指针为何还要STL迭代器

    指针和STL迭代器 1.迭代器 2.迭代器和指针的区别 3.迭代器产生原因 1.迭代器 Iterator(迭代器)模式又称 Cursor(游标)模式,用于提供一种方法顺序访问一个聚合 对象中各个元素, ...

  4. move std 函数 示例_C++ STL迭代器辅助函数

    advance(it, n) ---------- it 表示某个迭代器,n 为整数.该函数的功能是将 it 迭代器前进或后退 n 个位置.distance(first, last) -------- ...

  5. 万字长文炸裂!手撕 STL 迭代器源码与 traits 编程技法

    大家好,我是小贺. 1. 前言 天下大事,必作于细. 源码之前,了无秘密. 上一篇,我们剖析了 STL 空间配置器,这一篇文章,我们来学习下 STL 迭代器以及背后的 traits 编程技法. 在 S ...

  6. C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)

    C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...

  7. C++:迭代器(STL迭代器)iterator详解

    STL迭代器 参考链接:http://c.biancheng.net/view/338.html

  8. java 实现斐波切纳数列,求解这个算斐波切纳兔子有关问题的算法错哪了(和stl迭代器貌似有点关系)...

    求解这个算斐波切纳兔子问题的算法哪里错了(和stl迭代器貌似有点关系) #include #include #include #define BORN_AGE 3 #define DIE_AGE 12 ...

  9. C++ STL list添加(插入)元素方法详解

    C++ STL list添加(插入)元素方法详解 主要内容 主要内容 参考链接

最新文章

  1. php7 最新版本,总结PHP 7.x 各个版本的新特性
  2. mx3 android 5.1,魅族MX3揭晓:猎户座处理器5.1寸屏幕
  3. 初学Golang:channel的使用
  4. if not exist Oracle,oracle 兑现 if not exist 方法
  5. OpenCASCADE:使用扩展数据交换 XDE之读写 STEP 或 IGES
  6. 核心控制芯片选型建议书(中低端)
  7. [7.14更新日志]CRP编译缓存和海外构建让编译健步如飞!
  8. UI素材实用模板|2.5D等距风格插画专辑
  9. 如何用python画长方形_python opencv 画矩形跟老齐学Python之用Python计算
  10. 微信小程序项目源代码SSM英语学习平台
  11. 2款QQ空间相册批量下载原图工具(2020年12月有效)
  12. 原创 | 混沌工程(Chaos Engineering)初识
  13. 56个民族HTML代码
  14. 四边形内接于圆定理_初三专题:圆的内接四边形相关性质定理,你听说过托勒密定理么?...
  15. Hbase的table存储详解
  16. 一、Photoshop新版本(2019以后)常用快捷键总结、归纳
  17. matlab 矩阵元素平方和矩阵的平方
  18. 计算机桌面图标怎么变形了,教您电脑桌面图标变大了怎么办
  19. elasticsearch查看版本号
  20. 【洛谷 1293】班级聚会

热门文章

  1. word2vec关键词提取 python_【不可思议的Word2Vec】 3.提取关键词
  2. React Native之React速学教程
  3. BMap.Polygon对象触发事件mouseover、mouseout有时不触发
  4. 学习说话人识别和验证的判别特征
  5. 浅谈排序算法:冒泡排序法和选择排序法的区别
  6. 蒟蒻初学单片机的一丢丢笔记
  7. http://www.runoob.com
  8. 简短励志程序员口号_程序员的简短PSA:关于管理
  9. View基础知识总结
  10. sis防屏蔽程序是什么意思_如何搭建小程序商城,流量私域化是什么意思?-社交电商资讯_社区团购系统,社区团购小程序,社群团购系统,社交电商系统,专注社区团购系统研发...