• 大部分ACM中使用的都是C/C++语言,但是说到C语言和C++语言的区别,却不知道。

  • C++语言用于竞赛真的是非常方便的,里面有很多函数还有STL这个好东西,比C语言方便,比其他语言好理解。
  • 在C语言中,有指针这个东西,当然在C++中也能用指针,但是其实是不建议在C++中继续使用C语言的指针,于是C++有了引用传参这个东西来替代指针。对C++容器的访问,也就出现了迭代器这么一个东西。
  • 迭代器和指针类似,但迭代器更加丰富。

迭代器的操作运算符

  • 和指针类似,有以下操作:

 *iter;      //返回迭代器iter所指元素的引用
iter->men; //解引用iter并获得该元素的名为men的成员,相当于(*iter).men
++iter; //令iter指示容器的下一个元素
--iter; //令iter指示容器的上一个元素
iter1==iter2; // 如果两个迭代器指示的是同一个元素或者它指向同一个容器的尾后迭代器,则相等.
  • 除外迭代器也支持下面几种操作:
 iter+n;           //迭代器加上一个整数值仍得到一个迭代器,迭代器指示的新位置向前移动了,指示可能是容器的一个元素或者是尾部的下一个位置
iter-n; //相反,迭代器指示的位置向后移动了,指示可能是容器的一个元素或者是尾部的下一个位置
iter1+=n; //等价于iter1+n
iter1-=n; //等价于iter2-n
iter1-iter2; //两个迭代器的距离,
>,<,>=,<= //位置离begin近的较小
  • 但是得注意 ,后面这几种操作只有随机迭代器才支持,具体迭代器的分类下面会讲到。

迭代器的类型

  • 迭代器一般使用iterator 和  const_iterator两种类型,区别应该看名称也能猜出来,后者只能进行读取操作,而不能修改值。

  • c++11中,引入了两个新函数,cbegin和cend,这两个函数能直接返回 const_iterator 类型的迭代器,方便操作。

迭代器的分类

  • 每种容器都有自己的迭代器类型。
  • 只有Vector 和 Deque 的迭代器类别为随机访问,而其他map,set,list都只支持双向迭代器
  • 二者的区别就是随机迭代器支持+=n(n为常数)的运算,而双向迭代器只能自增自减。(当然你可以自己重载双向迭代器的+=操作)

迭代器的使用

  • 对于每种容器,使用迭代器方法是一样的,例如对vector而言:
 vector<int>::itertor it;  //定义了一个随机迭代器
vector<int>::const_itertor iter;  //定义了一个只读的随机迭代器
  • 对于其他容器使用方法同上,特别的是,C++的String类型也支持随机迭代器的形式。

容器中的大部分函数以及操作,都是基于迭代器完成的。所以学会使用迭代器是学习C++的一个必经之路。

值得一提的是,既然使用C++语言,就要完全利用C++语言的方便性,而不是仅仅只使用一个cin或者cout。

STL迭代器的更多相关文章

  1. STL迭代器笔记

    STL迭代器简介 标准模板库(The Standard Template Library, STL)定义了五种迭代器.下面的图表画出了这几种: input         output \       ...

  2. 一步一步的理解C++STL迭代器

    一步一步的理解C++STL迭代器 "指针"对全部C/C++的程序猿来说,一点都不陌生. 在接触到C语言中的malloc函数和C++中的new函数后.我们也知道这两个函数返回的都是一 ...

  3. STL 迭代器 iterator const

    STL迭代器很多时候可以当成指针来使用. 但是指针一般可以用const来控制访问. 那迭代器呢. #include <iostream> #include <vector> u ...

  4. STL迭代器的使用、正向、逆向输出双向链表中的所有元素

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  5. 【STL 源码剖析】浅谈 STL 迭代器与 traits 编程技法

    大家好,我是小贺. 点赞再看,养成习惯 文章每周持续更新,可以微信搜索「herongwei」第一时间阅读和催更,本文 GitHub : https://github.com/rongweihe/Mor ...

  6. STL迭代器之一:偏特化

    在stl的算法中运用容器的迭代器时,很可能经常会用到迭代器相应型别(例如迭代器所指物的型别),假设算法中有必要声明一个变量,以"迭代器所指对象的型别"为类型,如何是好,例如我们写一 ...

  7. C++ STL 迭代器失效问题

    之前看<C++ Primier>的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究.今天写程序的时候遇到了这个问题. 1 莫名其妙的Erase 最初我 ...

  8. stl 迭代器(了解)

    STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的. 对应于它们所支持的操作,共有五种 iterators ...

  9. stl迭代器原理

    具体实现肯定不如书上讲的清楚了,这里只是根据侯捷书上的讲解,自己建立一条思路以及形成一些相关的概念 迭代器也可被称作智能指针,用于遍历容器内的元素,stl每个容器都实现了自己的iterator,ite ...

  10. STL——迭代器的概念

    迭代器是一种抽象的设计概念,现实程序语言中并没有直接对应于这个概念的实物. 1 迭代器设计思维——STL关键所在 不论是泛型思维或STL的实际运用,迭代器都扮演这重要的角色.STL的中心思想在于:将数 ...

随机推荐

  1. 如何以python风格高逼格的改成购物车逻辑

    之前有一篇博文写到关于购物车的业务逻辑,分别运用cookie和redis存储未登录和登录用户的购物车数据,虽然已经很好的完成了业务逻辑,但是会发现代码的冗余很严重,也不够具有python特色,今天就让 ...

  2. 基于ZooKeeper的三种分布式锁实现

    [欢迎关注公众号:程序猿讲故事 (codestory),及时接收最新文章] 今天介绍基于ZooKeeper的分布式锁的简单实现,包括阻塞锁和非阻塞锁.同时增加了网上很少介绍的基于节点的非阻塞锁实现,主 ...

  3. GSS系列

    GSS1 直接维护静态区间和即可 #include<bits/stdc++.h> using namespace std; ; int n,a[N]; ]; inline void pus ...

  4. 启xin宝app的token算法破解——token分析篇(三)

    前两篇文章分析该APP的抓包.的逆向: 启xin宝app的token算法破解--抓包分析篇(一) 启xin宝app的token算法破解--逆向篇(二) 本篇就将对token静态分析,其实很简单就可以搞 ...

  5. ctpn+crnn 训练数据集生成

    1. https://github.com/Belval/TextRecognitionDataGenerator 2. https://textrecognitiondatagenerator.re ...

  6. JQuery $.ajax(); 异步访问完整参数

    $.ajax 完整参数   jquery中的ajax方法参数 url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post ...

  7. Okhttp3源码解析(5)-拦截器RetryAndFollowUpInterceptor

    ### 前言 回顾: [Okhttp的基本用法](https://www.jianshu.com/p/8e404d9c160f) [Okhttp3源码解析(1)-OkHttpClient分析](htt ...

  8. 以太坊智能合约[ERC20]发币记录

    以太坊被称为区块链2.0,就是因为以太坊在应用层提供了虚拟机,使得开发者可以基于它自定义逻辑,通常被称为智能合约,合约中的公共接口可以作为区块链中的普通交易执行.本文就智能合约发代币流程作一完整介绍( ...

  9. antd模糊搜索和远程数据的结合

    //用到此方法的情景  先根据input框中的姓名模糊搜索出客户名称,当选中客户名称之后,获取ID ,根据客户的ID,去搜索数据列表. 防抖方法 let timeout; let currentVal ...

  10. egret之moveclip 序列帧动画

    废话不多说,直接上代码: private addEffect(name, x: number, y: number, act?: string) { let data = RES.getRes(nam ...