C++学习笔记总结练习:迭代器

news2024/11/23 20:18:58

迭代器

1 基础

头文件

#include<iterator>

迭代器范围

begin和end被容器使用了,可以用front和back作为游标。
左闭右开区间

[begin,end)

使用迭代器进行遍历

遍历方法有三种:下标遍历、范围for遍历、迭代器遍历

container c;
first = c.begin();
last = c.end();
while(first != last){
    cout<<*first<<endl;//指向元素的游标指针。
    ++begin;
}

迭代器的类型

  • 正常迭代器
begin()
end()
  • 反向迭代器
rbegin()
rend()
  • 常量迭代器
cbegin()
cend()

操作冲突

容器操作可能会使迭代器实效。

2 迭代器类型——迭代器的适配器

除了容器定义的迭代器之外,标准库头文件iterator总额外定义了几种迭代器。

  • 插入迭代器。绑定到一个容器上,用来向容器中国插入元素
  • 流迭代器。绑定到输入输出流上,用来遍历关联的IO流
  • 反向迭代器。反向移动,除了forward_list外,标准库容器都有方向迭代器。
  • 移动迭代器。不会拷贝元素,而是移动元素。

插入迭代器

接受一个容器,生成迭代器,能够向容器中的指定位置添加元素。

在这里插入图片描述

在这里插入图片描述

  • back_inserter:创建一个push_back迭代器
  • front_inserter:创建一个push_front迭代器
  • inserter:创建一个insert迭代器。接受一个指向容器的迭代器。元素将被插入到给定迭代器所表示的元素之前。
#include<iostream>
#include<iterator>
#include<vector>
#include<list>

using namespace std;

int main(){

    list<int> lst ={1,2,3,4};
    list<int> lst2,lst3;
    //反向一个列表
    copy(lst.cbegin(),lst.cend(),front_inserter(lst2));
    //正向一个列表
    copy(lst.cbegin(),lst.cend(),inserter(lst3,lst3.begin()));
    return 0;
}

流迭代器

接受输入输出流,使用迭代器的方式读取数据。

  • istream_iterator:读取输入流。可以为任何定义了输入运算符的类创建迭代器对象。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9AGG90nm-1690857968361)(image/2021-03-06-14-50-48.png)]

    /*
    * 读取数据的三种方法
    * 直接使用输入输出流iostream
    * 使用字符串方法封装getline
    * 使用迭代器读取输入输出流istream_iterator/ostream_iterator
    */
    istream_iterator<int> in_iter(cin);//从cin读取数据
    istream_iterator<int> eof;//尾后迭代器
    istringstream in_string("hello world");
    istream_iterator<string> str_it(in_string);//字符串流迭代器
    
    int a =0;
    a = *in_iter;
    cout<<a<<endl;
    // in_iter++;
    cout<<*str_it<<endl;
    str_it++;
    cout<<*str_it<<endl;
  • ostream_iterator:读取输出流。可以为任何创建了输出运算符的类,创建输出流迭代器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pevzUNs2-1690857968361)(image/2021-03-06-14-51-10.png)]

    ostream_iterator<int> out_iter(cout,"\n");
    *out_iter =10;
    *out_iter = 100;

反向迭代器

从容器的尾元素向首元素反向移动的迭代器。递增递减操作相反。

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

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

相关文章

【项目 计网2】4.4网络模型 4.5协议 4.6网络通信的过程

文章目录 4.4网络模型OSI七层参考模型TCP/IP四层模型&#xff08;常用&#xff09;简介四层介绍 4.5协议简介常见协议UDP协议TCP协议IP协议以太网帧协议&#xff08;MAC地址封装&#xff09;ARP协议&#xff08;IP->MAC&#xff09; 4.6网络通信的过程封装分用 4.4网络模型 …

【Spring】使用注解存储Bean对象

目录 一、配置扫描路径&#xff08;使用注解的方式存对象的前提&#xff09; 二、使用类注解存储Bean对象 1、使用五大类注解存储Bean对象 2、为什么要这么多的类注解&#xff1f; 2.1、五大类注解之间的关系 3、获取Bean对象时的默认命名规则 三、使用方法注解来存储…

【Paper】2020_网络化多智能体系统的事件触发一致性研究_徐勇

徐勇. 网络化多智能体系统的事件触发一致性研究[D].浙江大学,2020.DOI:10.27461/d.cnki.gzjdx.2020.001385. 文章目录 5 已知 DoS 攻击策略下多智能体系统的事件触发安全一致性分析5.1 引言5.2 数学模型与问题描述5.3 控制器和事件触发条件的设计5.5 数值仿真程序 Main.m程序 M…

.locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

引言&#xff1a; 当今社会&#xff0c;互联网的迅速发展为我们的工作和生活带来了便利&#xff0c;但同时也伴随着越来越多的网络威胁。勒索病毒如.locked勒索病毒便是其中的代表之一。.locked勒索病毒利用高级加密算法&#xff0c;将用户重要的数据文件锁定&#xff0c;要求…

IP路由基础+OSPF 基础

IP路由 RIB与FIB RIB&#xff1a;Routing Information Base&#xff0c;路由信息库 &#xff0c;路由器的控制平面 FIB&#xff1a;Forwarding Information Base&#xff0c;转发信息库&#xff0c;路由器的数据平面 路由信息库主要是记录直连路由以及协议宣告的路由信息&am…

Windows安装子系统Linux

Windows安装子系统(Linux ubuntu&#xff09; 安装条件步骤1.安装WSL命令2.设置Linux用户名和密码3.写个简单的.c程序看看4.如何互传文件 安装条件 Windows 10版本2004及更高的版本才能安装。 步骤 1.安装WSL命令 我们可以使用WSL来安装子系统 Linux ubuntu(默认是这个)。 …

思科2021笔试题

笔试时间&#xff1a;2020.09.07&#xff0c;19&#xff1a;00——21&#xff1a;00 岗位&#xff1a;嵌入式软件工程师 题型&#xff1a;数据结构4道&#xff0c;网络3道&#xff0c;操作系统3道&#xff0c;C4道&#xff0c;Java4道&#xff0c;python4道&#xff0c;数据库…

ORCA优化器浅析——CQueryContext对优化器的要求

从ORCA优化器浅析——重要主流程概述中可以知道进入真正优化器引擎执行流程之前需要对优化器提出要求&#xff0c;比如后面会提到的required columns、required sort orders等。而CQueryContext即是承载这些内容的类。首先CQueryContext类是通过PqcGenerate函数构造的&#xff…

深入学习JVM —— GC垃圾回收机制

前言 前面荔枝已经梳理了有关JVM的体系结构和类加载机制&#xff0c;也详细地介绍了JVM在类加载时的双亲委派模型&#xff0c;而在这篇文章中荔枝将会比较详细地梳理有关JVM学习的另一大重点——GC垃圾回收机制的相关知识&#xff0c;重点了解的比如对象可达性的判断、四种回收…

推荐一款老化测试软件 Monitor.Analog

1. 数据采集模块&#xff1a; 该模块负责与下位机设备通信&#xff0c;实时采集模拟量数据。支持多种通信协议&#xff0c;如Modbus、OPC等&#xff0c;以适应不同类型的设备。数据采集模块还需要具备异常数据处理功能&#xff0c;例如数据丢失、错误数据等。 2. 数据存储模块…

Linux命令200例:用Look一个进行文本搜索工具

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f3c6;本文已…

Python简单应用V

题目 通过编写函数实现下述各题。 输入一字符串&#xff0c;各个子串之间按空白字符隔开&#xff0c;分别显式其中最长、最短子串&#xff0c;以及最大、最小字符。 输入单个字符&#xff0c;判断并显示该字符是否为大写英文字母、小写英文字母、非英文文字字符、空格、数字或…

【Paper Reading】DETR:End-to-End Object Detection with Transformers

背景 Transformer已经在NLP领域大展拳脚&#xff0c;逐步替代了LSTM/GRU等相关的Recurrent Neural Networks&#xff0c;相比于传统的RNN&#xff0c;Transformer主要具有以下几点优势 可解决长时序依赖问题&#xff0c;因为Transformer在计算attention的时候是在全局维度进行…

CentOS7---部署Tomcat和安装Jpress

总览需求 1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。1、简述静态网页和动态网页的区别 静态网页&#xff1a; 请求响应信息&#xff0c;发给客户端进行处理&#xff0c…

回顾 OWASP 机器学习十大风险

日复一日&#xff0c;越来越多的机器学习 (ML) 模型正在开发中。机器学习模型用于查找训练数据中的模式&#xff0c;可以产生令人印象深刻的检测和分类能力。机器学习已经为人工智能的许多领域提供了动力&#xff0c;包括情感分析、图像分类、面部检测、威胁情报等。 数十亿美…

复现sci顶刊中的画中画(局部细节放大)

简介 小编在撰写学术论文时&#xff0c;为了突出所提模型的优越性&#xff0c;你可以通过放大图形中的局部位置来进行比较。尽管从全局来看&#xff0c;各个方法的拟合效果都还不错&#xff0c;但通过放大图中的特定区域&#xff0c;可以更清楚地展示所提模型相对于其他模型的…

echarts实现立体柱状图

实现效果图如下&#xff1a; 上面除了立体图之外还增加了背景图。注意&#xff0c;可以发现这个图的右下角是是和x轴平齐的&#xff0c;如果右下角也要折角&#xff0c;可以根据代码修改下描点的点位就可以了。 完整代码如下&#xff1a; <template><div id"ba…

从特斯拉FSD v11.4.6,看FSD入华

从特斯拉FSD v11.4.6&#xff0c;看FSD入华 1. 芝加哥城区a. 亮点b. 问题 2. 小镇中心a. 亮点b. 问题 3. FSD入华a. 技术路线b. 场景 4. 参考视频 FSD最近更新了v11.4.6&#xff0c;本文根据2个FSD城区测试视频&#xff0c;一起看一下有哪些亮点和问题。 FSD入华的消息也甚嚣尘…

HTML5中Canvas学习笔记:Canvas

目录 一、HTML中Canvas画图strokeStyle 和 fillStyle 的区别是什么&#xff1f; 二、如何设置一幅canvas图中某个颜色透明&#xff1f; 三、H5 canvas中strokeRect参数如果是小数&#xff0c;如何处理&#xff1f; 四、H5 Canvas中如何画圆角矩形框&#xff1f; 一、HTML中…

python字符串输入输出与注解

目录 数据输入 前言 数据输出 字符串 字符串的三种定义方法 引号嵌套 字符串的拼接 字符串格式化 拼接字符串缺点 python常用的格式符号 格式化的精度控制 字符串快速格式化 快速格式化特点 对表达式进行格式化 具体案例 字符串的大小比较 字符串比较方式 变…