C++标准库 第七章 STL迭代器

迭代器

  • 能力:行进和存取的能力

Input迭代器

  • 一次一个向前读取元素,按此顺序一个一个返回元素
  • 例子:从标准输入装置(键盘) 读取数据,同一个数据不会被读取两次,流水一样,指向的是逻辑位置
  • 使用前置式递增运算符 ++x 替代后置式递增运算符x++,前者不需要返回旧的数值,不需要花费一个对象来保存旧的数值
  • Input无递减运算操作符号

 Output输出迭代器

  • 和input迭代器相反,作用是将元素数值一个一个写入。不可以使用输出迭代器对同一序列进行两次遍历写入、
  • operator* 只有在赋值语句的左手边才会有效
  • 输出迭代器没有比较操作,无法检测 输出迭代器是否有效,或者写入数据是否成功
  • 例子:inserters用于将元素插入到容器内的一种迭代器,对其赋予一个新的数值,就会将其安插在容器内部,元素之前不会被覆盖

 Forward (前向)迭代器 

  • forward前向迭代器是 input(全部功能)和output(部分功能)迭代器的结合。
  • 区别于输出迭代器,前向迭代器可以多次指向同一群集中的同一个元素,并可以多次处理同一个元素
// Ok for output iterators
// Error for forward iterators
while(true){*pos = foo();++pos;
}// Ok for forward iterators
// Error for output iterators
while(pos != coll.end()){*pos = foo();++pos;
}
  • forward迭代器提领数据之前需要确保数据有效,如果使用while(true),就会出现错误,因为forward会访问 end()对应的元素,引发错误
  • 输出迭代器不可以使用 这个循环 while(pos != coll.end())   ,因为其没有定义operator!=

Bidirectional 

 Random Access (随机存取)迭代器

  • 需要提供迭代器的算数运算,类似于指针的算数运算,也就是加减某一个特定的偏移量,能处理距离问题,使用诸如 < >等相互关系运算符进行比较
  • 支持随机存取迭代器的对象和型别:可随机存取的容器(vector\deque)、strings(字符串、string、wstring)、一般的array(指针)

  • 只有是随机存取迭代器才可以使用operator < 作为循环的结束与否的判断条件
  • 代码一定要严谨:比如(coll.end()-1)如果群集为空,便会访问到begin()之前的数据,出现错误;
  • 下面的代码可能出现问题,vector迭代器可能被实例化为一般的指针,考虑到C++不允许你修改任何基本型别的暂时值(包括指针),但是struct和class可以,因此使用辅助对象

 

  •  strings迭代器也常会被实例化为一般的字符指针

迭代器相关的辅助函数

  • advance() 、distance() 适用于random access迭代器,前进后退以及处理迭代器之间的距离
  • iter_swap适用于迭代器的数值交换

 

 

 

迭代器配接器

  •  逆向模式、安插模式、流模式

逆向模式

  • 重新定义递增和递减运算,行为倒置

 

 

Insert迭代器

  •  将赋值新值转化为安插新值

 

 

 

 

 

 

Input stream

 

 

 

 

 

 

 缺省调用,后面三个数值均使用默认值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nacos集群的ap cp切换_阿里Nacos-配置-多环境

多环境的配置隔离是配置中心最基础的一个功能之一。不同的环境配置的值不一样&#xff0c;比如数据库的信息&#xff0c;业务的配置等。Spring Boot 多环境配置首先我们来回顾下在Spring Boot中用配置文件的方式怎么进行环境的隔离。默认我们都会创建一个application.propertie…

java 值传递机制

说明 案例1 案例2 案例3 案例4 案例5 案例6 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/2 21:24* function 将对象作为参数传递给方法*/ public class Circle {double radius;public double findArea() {return Math.PI * Ma…

密码学专题 非对称加密算法指令概述 RSA

非对称加密算法也称为公开密钥算法&#xff0c;其解决了对称加密算法密钥需要预分配的难题&#xff0c;使得现代密码学的研究和应用取得了重大发展。非对称加密算法的基本特点如下: 加密密钥和解密密钥不相同;密钥对中的一个密钥可以公开(称为公开密钥);根据公开密钥很难推算出…

python元胞自动机模拟交通_结构专栏 | 解析DEFORM软件中的元胞自动机法

点击上方蓝色字体&#xff0c;关注我们导语金属材料的性能取决于内部的微观组织结构&#xff0c;而好的材料性能和价格是产品最大的优势。随着现代物理冶金、热成形技术、热处理技术和计算机技术的兴起与发展&#xff0c;使预测和控制金属材料热加工过程中的组织演变成为可能。…

java 递归

概念 代码 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/2 21:42* function 递归&#xff1a;求n个数的和、乘积*/ public class Recursion {public static void main(String[] args) {Recursion recursion new Recursion();S…

密码学专题 非对称加密算法指令概述 DH算法指令

DH概述 用于密钥交换的公开算法&#xff0c;广泛应用于各种安全协议SSL协议同样支持DH算法DH算法使用之前需要预先共享两个参数&#xff0c;本原元g和模n&#xff0c;这两个参数影响到算法的安全性&#xff0c;因此需要预先生成并检测其安全性生成这些必要参数和管理这些参数的…

java 封装和隐藏 权限修饰符

概念 问题的引入 封装性的体现 权限修饰符 案例 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/3 15:28* function*/ public class Person {private int age;public void setAge(int age) { /* if (age<0||age>…

密码学专题 非对称加密算法指令概述 DSA算法指令

DSA算法和DSA指令概述 DSA算法是美国国家标准的数字签名算法&#xff0c;只具备数字签名的功能不具备密钥交换的功能生成DSA参数然后生成DSA密钥&#xff0c;DSA参数决定了DSA密钥的长度三个指令首先是dsaparam指令&#xff0c;该指令主要用来生成DSA密钥参数&#xff0c;并提…

每天定时打开某个网页_Python科普帖定时通知

0 复习上一关我们学习了selenium&#xff0c;它有可视模式与静默模式这两种浏览器的设置方法&#xff0c;二者各有优势。然后学习了使用.get(URL)获取数据&#xff0c;以及解析与提取数据的方法。在这个过程中&#xff0c;我们操作对象的转换过程&#xff1a;除了上面的方法&am…

java 构造器

概念 案例1 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/3 15:28* function*/ public class Person {private int age;private String name;public Person() {this.age 18;}public Person(int age, String name) {this.age …

密码学专题 信息摘要和数字签名指令

信息摘要 区别于对称加密和非对称加密&#xff0c;信息摘要算数是一种不可逆的操作&#xff0c;无论输入数据的大小输出的数据长度是固定的信息摘要算数对输入很敏感&#xff0c;即使数据变化很细微&#xff0c;输出的结果会出现很大的差异从不同输入得到相同的输出的概率非常…

dataframe 筛选_Spark.DataFrame与Spark.ML简介

本文是PySpark销量预测系列第一篇&#xff0c;后面会陆续通过实战案例详细介绍PySpark销量预测流程&#xff0c;包含特征工程、特征筛选、超参搜索、预测算法。在零售销量预测领域&#xff0c;销售小票数据动辄上千万条&#xff0c;这个量级在单机版上进行数据分析/挖掘是非常困…

密码学专题 证书和CA指令 证书和CA功能概述

为什么需要证书 实现了公钥和私钥的相互验证&#xff0c;但是任何人都可以生成很多的密钥对&#xff0c;密钥对并没有关联实体身份&#xff0c;因此诞生可数字证书前提是CA是所有用户都信任的用户需要将自己的信息和公钥交给CA进行认证生成一个属于自己并被其与用户认可的数字…

密码学专题 证书和CA指令 申请证书|建立CA|CA操作|使用证书|验证证书

Req指令介绍 功能概述和指令格式 req指令一般来说应该是提供给证书申请用户的工具&#xff0c;用来生成证书请求以便交给CA验证和签发证书。但是&#xff0c;OpenSSL的req指令的功能远比这样的要求强大得多&#xff0c;它不仅可以生成RSA密钥、DSA密钥&#xff0c;以及将它们…

密码学专题 OpenSSL标准转换指令

概述 繁多复杂的各种文件编码格式、证书格式和密钥格式等。事实上&#xff0c;并非OpenSSL开发者想要将数字世界弄得如此令人头疼&#xff0c;只是由于各种原因&#xff0c;数字世界存在各种不同的标准&#xff0c;为了尽量兼容这些不同的标准&#xff0c;OpenSSL开发者才相应…

java pakage、import关键字

package介绍 常用的包 import 案例

密码学专题 OpenSSL中SSL相关指令

再谈SSL和OpenSSL 由于SSL协议已经是密码学和PKI技术中非常具体的一个应用协议&#xff0c;为了实现它&#xff0c;OpenSSL在密码学基础应用和PKI技术的基础实现上做了大量的工作&#xff0c;才逐渐形成和奠定了OpenSSL在密码学应用和PKI技术开发中的重要基础软件包地位。Open…

使用MetaMask实现转账交易时附带Input Data数据

进入如下页面&#xff0c;点击View Assert in Explorer进入Etherscan网站&#xff0c;就可以看到本账户先前所有的交易信息。 字段分析 Txn Hash 是交易的HashMethod&#xff1a;交易的类型&#xff0c;一般是两种&#xff0c;如果是Transfer指定的是合约部署&#xff1b;如…