C++---迭代器介绍

在这里插入图片描述


迭代器的介绍

使用迭代器需要引用头文件,但一般的容器都引用了这个头文件。
在这里插入图片描述
这五种迭代器的声明如下:

struct output_iterator_tag { };//输出迭代器
struct input_iterator_tag{ };//输入迭代器
struct forward_iterator_tag : public input_iterator_tag {};//向前迭代器
struct bidirectional_iterator_tag : public forward_iterator_tag {};//双向迭代器
struct random_access_iterator_tag : public bidirectional_iterator_tag{};//随机迭代器

在这里插入图片描述
在这里插入图片描述

迭代器的适配器

Insert迭代器,也称为inserter,用于安插新数据。利用这种迭代器,算法将执行安插(insert)而不是赋值(虽然操作是赋值)。

#include <iterator>
#include <vector>
#include <iostream>
using namespace std;//输出coll的所有元素值
template<typename T>
void Show(const T& coll)
{for (auto& x : coll)cout << x << " ";cout << endl;
}int main()
{vector<int> v;//auto it1 = v.begin();//for (int i = 0; i < 3; i++)//错误,v是空的容器,不能通过普通迭代器赋值(插入)数据//{//    *it1 = i;//    it1++;//}Show(v); //输出容器的所有元素//通过类创建对象back_insert_iterator<vector<int> > it2(v);//创建插入迭代器对象it2 = 1;  //不解引用直接赋值it2++;   //迭代器后移*it2 = 2; //解引用赋值,和直接赋值一样,等同it2 = 2;++it2;  //迭代器后移,等同it2++*it2 = 3;Show(v);//输出容器的所有元素//通过函数创建对象back_inserter(v) = 4;//用函数创建插入迭代器并赋值*back_inserter(v) = 5;//用函数创建插入迭代器并赋值Show(v);//接收函数返回值,可以多次使用auto it3 = back_inserter(v);//这种最简单好用*it3++ = 6;it3++ = 7;it3 = 8;it3 = 9;//这行并没有用9覆盖8,而是在后面新插入一个9Show(v);return 0;
}

说明:
1.容器不能通过普通的迭代器插入数据。
2.可以通过back_insert_iterator创建尾插迭代器对象,也可以通过back_inserter函数创建尾插迭代器对象。
3.注意it2 = 1和*it2 = 2都是插入一个数据而不是赋值。
4.建议使用back_inserter,更简单。

在这里插入图片描述
所以上面的程序,可以用下面更简单的方法实现

int main()
{vector<int> v;//接收函数返回值,可以多次使用auto it3 = back_inserter(v);//这种最简单好用for (int i = 1; i < 10; i++)it3 = i; //插入iShow(v);return 0;
}

安插迭代器种类

C++标准库提供三种insert迭代器(适配器):back inserter(尾插迭代器),front inserter(头插迭代器)和general inserter(一般插入迭代器)。它们的区别在于插入的位置。每一种迭代器都可以通过一个函数生成和初始化。

在这里插入图片描述
上表中cont表示容器,pos表示插入位置迭代器,value表示插入的元素。
当然,容器本身必须支持安插迭代器所调用的容器内部的函数。


本篇完!

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

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

相关文章

基于序列深度学习模型的向量海岸线形状分类方法 2024.05

本文中提出了一个数据驱动的方法来分类的形状矢量海岸线&#xff0c;该方法利用基于序列的深度学习算法对海岸线矢量分段进行建模和分类。具体而言&#xff0c;首先将复杂的海岸线划分为一系列弯曲&#xff0c;并进一步提出了一组不同的特征来描述每个弯曲的形态特征。然后&…

强化学习——学习笔记2

在上一篇文章中对强化学习进行了基本的概述&#xff0c;在此篇文章中将继续深入强化学习的相关知识。 一、什么是DP、MC、TD&#xff1f; 动态规划法&#xff08;DP&#xff09;&#xff1a;动态规划法离不开一个关键词&#xff0c;拆分 &#xff0c;就是把求解的问题分解成若…

【JavaScript脚本宇宙】点燃你的Web开发:数据绑定和MV*框架

逐一剖析&#xff1a;JavaScript框架和库的概述、特点与应用 前言 在当今技术日新月异的时代&#xff0c;JavaScript库和框架已成为前端开发的重要工具。这篇文章将详细介绍六种不同的JavaScript库和框架&#xff0c;帮助读者了解他们的主要特性、使用示例和适用场景。 欢迎订…

gif帧数修改怎么操作?一键掌握GIF帧数修改技巧!

gif帧数修改怎么操作&#xff1f;在数字化信息爆炸的时代&#xff0c;GIF动图因其生动有趣的特性而备受广大网友喜爱。然而&#xff0c;很多时候我们可能会遇到GIF动图帧数过多或过少&#xff0c;导致动画效果不尽如人意的情况。那么&#xff0c;如何对GIF动图的帧数进行修改呢…

探索微软Edge开发者工具:优化前端开发的艺术与科学

探索微软Edge开发者工具&#xff1a;优化前端开发的艺术与科学 引言&#xff1a;Edge开发者工具概览一、基础操作&#xff1a;步入DevTools的大门1.1 启动与界面布局1.2 快速导航与定制 二、元素审查与样式调整2.1 精准元素选取2.2 实时CSS编辑2.3 自动完成与内联文档 三、Java…

YOLOv10最详细全面讲解1- 目标检测-准备自己的数据集(YOLOv5,YOLOv8均适用)

YOLOv10没想到出来的如此之快&#xff0c;作为一名YOLO的爱好者&#xff0c;以YOLOv5和YOLOv8的经验&#xff0c;打算出一套从数据集装备->环境配置->训练->验证->目标追踪全系列教程。请大家多多点赞和收藏&#xff01;&#xff01;&#xff01;YOLOv5和YOLOv8亲测…

dubbo复习:(13)把服务划分为不同的group 和version,只有服务端和客户端group和version匹配才能通信

一、接口定义 package cn.edu.tju.service;public interface DevelopService {String invoke(String param); }二、两个版本的实现&#xff1a; package cn.edu.tju.service;import org.apache.dubbo.config.annotation.DubboService;DubboService(group "group1"…

bert模型数据集加载方式

数据集构造 无论是机器学习还是深度学习对于数据集的构造都是十分重要。 现记录一下PyTorch 的 torch.utils.data.Dataset 类的子类。Dataset 类是PyTorch框架中用于处理数据的基本组件&#xff0c;它允许用户定义自己的数据集类&#xff0c;以满足特定任务的需求。 Dataset…

重学英语:输出的重要性

精通一门外语的四要素&#xff1a;听&#xff0c;说&#xff0c;读&#xff0c;写 输入&#xff1a;听&#xff0c;读 输出&#xff1a;写&#xff0c;说 因为输入是我们可以单独完成&#xff0c;不需要有人互动&#xff0c;所以我们做得最多 输出练习做得很少&#xff0c;…

Redis中的数据结构与内部编码

本篇文章主要是对 Redis 常见的数据结构进行讲解&#xff0c;同时还对其所对应的不同的内部编码进行讲解。希望本篇文章会对你有所帮助。 文章目录 一、五大数据结构 二、数据结构对应的编码方式 String hash list set zset &#x1f64b;‍♂️ 作者&#xff1a;Ggggggtm &…

js 面试题学习笔记一

1、什么是防抖和节流&#xff1f;有什么区别&#xff1f;如何实现&#xff1f; 防抖&#xff1a;触发高频事件后N秒内函数只会执行一次&#xff0c;如果N秒高频事件再次被触发&#xff0c;则重新计算时间。&#xff08;a时间触发&#xff0c;5秒内执行一次&#xff0c;但是第4…

10G UDP协议栈 (9)UDP模块

目录 一、UDP协议简单介绍 二、UDP功能实现 三、仿真 一、UDP协议简单介绍 UDP协议和TCP协议同位于传输层&#xff0c;介于网络层&#xff08;IP&#xff09;和应用层之间&#xff1a;UDP数据部分为应用层报文&#xff0c;而UDP报文在IP中承载。 UDP 报文格式相对于简单&am…

电脑出现:excel词典(xllex.dll)文件丢失或损坏的错误提示怎么办?有效的将丢失的xllex.dll修复

当遇到 Excel 提示“词典 (xllex.dll) 文件丢失或损坏”的问题时&#xff0c;通常意味着该动态链接库文件&#xff08;Dynamic Link Library&#xff0c;DLL&#xff09;&#xff0c;它与拼写检查功能相关联的&#xff0c;无法被正确找到或者合适地使用。那么有什么办法可以解决…

LLVM技术在GaussDB等数据库中的应用

目录 LLVM和数据库 LLVM适用场景 LLVM对所有类型的SQL都会有收益吗&#xff1f; LLVM在OLTP中就一定没有收益吗&#xff1f; GaussDB中的LLVM 1. LLVM在华为应用于数据库的时间线 2. GaussDB LLVM实现简析 3. GaussDB LLVM支持加速的场景 支持LLVM的表达式&#xff1a…

vue项目出现多次ElMessage

问题&#xff1a; 解决方法&#xff1a; let message null if (message null) { message ElMessage.error(“登录过期,请重新登录”); } 最终效果&#xff1a;只出现一个弹框

Orange AIpro Color triangle帧率测试

OpenGL概述 OpenGL ES是KHRNOS Group推出的嵌入式加速3D图像标准&#xff0c;它是嵌入式平台上的专业图形程序接口&#xff0c;它是OpenGL的一个子集&#xff0c;旨在提供高效、轻量级的图形渲染功能。现推出的最新版本是OpenGL ES 3.2。OpenGL和OpenCV OpenCL不同&#xff0c;…

实操专区-第15周-课堂练习专区-漏斗图与金字塔图

实操专区-第15周-课堂练习专区-漏斗图 下载安装ECharts&#xff0c;完成如下样式图形。 代码和截图上传 基本要求&#xff1a;下图3选1&#xff0c;完成代码和截图 完成 3.1.3.16 漏斗图中的任务点 基本要求&#xff1a;2个选一个完成&#xff0c;多做1个加2分。 请用班级学号姓…

银行对公贷款软件业务流程详解

对公贷款业务是指商业银行向企事业单位提供资金支持&#xff0c;用于资本扩充、生产经营、项目建设等方面的融资。其目的在于支持企事业单位的发展&#xff0c;推动经济增长。通过提供资金支持&#xff0c;企事业单位可以获得必要的资金来扩大生产规模、提高生产能力、研发新产…

第8周 分布式事务与数据一致性主流解决方案落地

第8周 分布式事务与数据一致性主流解决方案落地 1. 最终一致性原理与解析2. 微服务的解耦3. 本地消息存储4. 自定义事务管理器5. 本地消息删除********************************************************************************** 本周拓展数据的一致性落地&#xff0c;采用弱…

【Java EE】网络原理——HTTP请求

目录 1.认识URL 2.认识“方法&#xff08;method&#xff09;” 2.1GET方法 2.1.1使用Fiddler观察GET请求 2.1.2 GET请求的特点 2.2 POST方法 2.2.1 使用FIddler观察POST方法 2.2.2 POST请求的特点 3.认识请求“报头”&#xff08;header&#xff09; 3.1 Host 3.2 C…