C++(反向迭代器)
前言:
上一章我们介绍了适配器,也提了一下迭代器适配器,今天我们就从反向迭代器把迭代器适配器给解释一下。
既然 都叫迭代器容器了 就说名只要接口合适他可以封装实现各种容器需求包括vector list 。
目录
1.反向迭代器设计
1.1反向迭代器思想
1.2多参数模板
2.vecor反向迭代器
3.list反向迭代器
1.反向迭代器设计
反向迭代器 reverse_iterator
可以用来反向遍历容器,在某些场景下很实用
1.1反向迭代器思想
因为数组比较简单,我们就从数组引出反向的思想。
注:库中的反向迭代器在设计时,为了最求极致的对称,rbegin()
指向最后一个有效元素的下一个位置,rend()
指向第一个有效元素(位置是与正向迭代器相反的)
通过图示知道,反向迭代器的++就是正向迭代器的--。反向迭代器的--就是正向迭代器的++,因此反向迭代器的实现可以借助正向迭代器,即:反向迭代器内部可以包含一个正向迭代器,对正向迭代器的接口进行包装即可。
1.2多参数模板
在模拟实现list迭代器时候,我们在const对象对普通对象代码的复用的 过程中,引入了多参数模板,不同参数实现不同功能,反向迭代器的实现同样适用。有两点需要注意:
- 重载operator*()返回的是目标对象的引用,又因为库里追求极致对称,所以我们应该先执行--操作后返回对象的引用。
- 具体返回的对象是否需要const修饰,取决于我们使用的模板参数。
#pragma once
namespace cmx
{template <class iterator, class Ref, class Ptr>struct Reverselterator{typedef Reverselterator<iterator, Ref, Ptr> self;iterator _it;Reverselterator(iterator it):_it(it){}Ref operator *(){iterator tmp = _it;return *(--tmp);}Ptr operator ->(){return &(operator*());}self& operator++(){-- _it;return *this;}self& operator--(){++ _it;return *this;}bool operator !=(const self& s) const{return _it != s._it;}};}
完成头文件的编写之后,我们就可以把他运用于所有可以用迭代器访问的容器 比如 vector list,只需要修改模版参数中正向迭代器的代码就可以适配出属于自己的反向迭代器。
2.vecor反向迭代器
只需要引用 反向迭代器的头文件 ReverseIterator.h 就可以使用,具体代码如下:
#include<assert.h>
#include"ReverseIterator.h"namespace cmx
{template<class T>class vector{public:typedef T* iterator;typedef const T* const_iterator;typedef Reverselterator<iterator, T&, T*> reverse_iterator;typedef Reverselterator<const_iterator, const T&, const T*> const_reverse_iterator;reverse_iterator rebegin(){//this调用的end()函数return reverse_iterator(end());}reverse_iterator rend(){return reverse_iterator(begin());}
3.list反向迭代器
代码如下:
template<class T>class list{typedef list_node<T> Node;public:typedef __list_iterator<T, T&, T*> iterator;typedef __list_iterator<T, const T&, const T*> const_iterator;typedef Reverselterator<iterator, T&, T*> reverse_iterator;typedef Reverselterator<const_iterator, const T&, const T*> const_reverse_iterator;
相关文章:
C++(反向迭代器)
前言: 上一章我们介绍了适配器,也提了一下迭代器适配器,今天我们就从反向迭代器把迭代器适配器给解释一下。 既然 都叫迭代器容器了 就说名只要接口合适他可以封装实现各种容器需求包括vector list 。 目录 1.反向迭代器设计 1.1反向迭代…...
DataX和dataX-web 集群部署及使用
📑 DataX和dataX-web 集群部署及使用 一 . 安装前准备 DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 DataX 采用 框架 插件 的模式…...
常见的数据存储方案:选择合适的方式来管理您的数据
对于数据存储方案的选择,是现代企业和个人都需要面对的重要决策。本文将为您介绍几种常见的数据存储方案,包括关系型数据库、NoSQL数据库以及分布式文件系统。通过了解每种方案的特点、操作方式和适用业务类型,希望能帮助您选择合适的数据存储…...
leetcode 221 最大正方形 + 1277 统计全为1的正方形子矩阵
题目 在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。 示例 输入:matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“…...
yolov7车牌识别(12种中文车牌类型)
12种中文车牌类型: 1.单行蓝牌 2.单行黄牌 3.新能源车牌 4.白色警用车牌 5 教练车牌 6 武警车牌 7 双层黄牌 8 双层武警 9 使馆车牌 10 港澳牌车 11 双层农用车牌 12 民航车牌 测试demo: 以yolov7-lite-s 为例: python detect_rec_plate.py --detect_model weigh…...
Mac PF命令防火墙
查看所有网络接口及其名称 ifconfig -a 文件目录:/etc/pf.conf 在文件末尾添加以下行: block drop from IP_ADDRESS其中,"IP_ADDRESS"是您要屏蔽的IP地址。 输入以下命令以重新加载pf防火墙配置文件: sudo pfctl …...
prototype-based learning algorithm(原型学习)
Prototype-based learning(原型学习)是一种机器学习方法,它的核心思想是通过存储一组代表性的样本(原型),然后使用这些原型来进行分类、回归或聚类等任务。这种方法模拟了人类学习的方式,人们往…...
【数据结构-二叉树 八】【遍历求和】:求根到叶子节点数字之和
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【遍历求和】,使用【二叉树】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&am…...
PHP知识大全
PHP知识大全 1. 变量如何定义?如何检查变量是否定义?如何删除一个变量?怎样检测变量是否设置? $定义 isset()// 检测变量是否设置 defined()// 检测常量是否设置unset()//销毁指定的变量 empty()// 检测…...
Jmeter常用参数化技巧总结!
说起接口测试,相信大家在工作中用的最多的还是Jmeter。 JMeter是一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议。 在做…...
iTunes更新iOS17出现发生未知错误4000的原因和解决方案
有不少人使用iTunes更新iOS 17时出现「无法更新iPhone发生未知的错误4000」的错误提示,不仅不知道iTunes升级失败的原因,也无从解决iPhone无法更新4000的问题。 小编今天就分享iPhone更新iOS系统出现4000错误提示的原因和对应的解决方案。 为什么iPhone…...
微信小程序 table表格 固定表头和首列 右侧表格可以左右滚动
(一) 1.左侧一列固定不动 2.右侧表格内容可以左右滚动 3.单元格内容平均分配 4.每一行行高可以由内容撑开 通过 js 设置左侧一列行高与右侧表格内容行高保持一致 1.1 效果图 1.2 tabble.wxml <view classtable><!-- 左侧固定 --><view classtable_left_colum…...
Final Cut Pro 10.6.10中文用法儿
Final Cut Pro是一款专业视频编辑软件,主要用于影片的后期剪辑、调色、特效、音频处理等方面。 Final Cut Pro for Mac(fcpx视频剪辑) 10.6.10中文版 以下是一些基本的使用方法和快捷键: 添加素材: 在检视器中,可以使用E快捷键把所选素材片…...
【网络安全---XSS漏洞(1)】XSS漏洞原理,产生原因,以及XSS漏洞的分类。附带案例和payload让你快速学习XSS漏洞
以pikachu靶场为例子进行讲解,pikachu靶场的搭建请参考以下博客; 【网路安全 --- pikachu靶场安装】超详细的pikachu靶场安装教程(提供靶场代码及工具)_网络安全_Aini的博客-CSDN博客【网路安全 --- pikachu靶场安装】超详细的pi…...
云计算:常用系统前端与后端框架
目录 一、理论 1.前端 2.后端 一、理论 1.前端 (1)JavaScript框架 JQuery.JS ZeptoJS(与jquery类似) SUI.Mobile Node.JS (服务端) angular.Js (模型,scope作用域,controller, 依赖注入,MVVM) :前端MVC . requir…...
asp.net闲置物品购物网系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
一、源码特点 asp.net闲置物品购物网系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语 言开发 asp.net 闲置物品购物网 二、功…...
一般纳税人缺少进项票,如何降低税负压力?
《梅梅谈税》专注于企业税务筹划!助力企业合理、合规、合法进行节税税收筹划! 大部分一般纳税人企业通常都存在进项和成本发票欠缺的问题,而进项发票欠缺,就会导致企业的增值税和企业所得税税负压力过大,那么如何解决…...
UniAD 论文学习
一、解决了什么问题? 当前的自动驾驶方案大致由感知(检测、跟踪、建图)、预测(motion、occupancy)和规划三个模块构成。 为了实现各种功能,智驾方案大致包括两种路线。一种是针对每个任务都部署一个模型&a…...
(c语言)用冒泡排序模拟实现qsort()函数交换整数
#include<stdio.h> int cmp(const void* x1, const void* x2) { return (*(int*)x1 - *(int*)x2); } void Swap(char* x, char* y, int width) //将两个数改为char*类型,每次只交换一个字节,直到将int*的四个字节全部交换一遍 { int i 0; f…...
【Java-LangChain:使用 ChatGPT API 搭建系统-11】用 ChatGPT API 构建系统 总结篇
第十一章,用 ChatGPT API 构建系统 总结篇 本课程详细介绍了 LLM 工作原理,包括分词器(tokenizer)的细节、评估用户输入的质量和安全性的方法、使用思维链作为 Prompt、通过链式 Prompt 分割任务以及返回用户前检查输出等。 本课…...
3D 生成重建004-DreamFusion and SJC :TEXT-TO-3D USING 2D DIFFUSION
3D 生成重建004-DreamFusion and SJC :TEXT-TO-3D USING 2D DIFFUSION 文章目录 0 论文工作1 论文方法1.1论文方法1.2 CFG1.3影响1.4 SJC 2 效果 0 论文工作 对于生成任务,我们是需要有一个数据样本,让模型去学习数据分布 p ( x ) p(x) p(x…...
机械臂抓取的产业落地进展与思考
工业机械臂是一种能够模拟人类手臂动作的机械装置,具有高精度、高速度和高灵活性的特点。近年来,随着人工智能和机器人技术的快速发展,机械臂在工业生产、物流仓储、医疗护理等领域得到了广泛应用。机械臂抓取技术作为机械臂的核心功能之一&a…...
【RuoYi-Cloud项目研究】【ruoyi-auth模块】登录请求(/login)分析
文章目录 0. 网关如何处理登录请求1. Controller1.1. 获取用户信息1.2. 创建用户的token 2. Service2.1. FeignClient远程查询用户信息2.2. 验证密码 3. 何时刷新 token,如何刷新【本文重点】 本文主要是分析登录请求 /login 的过程。 调用过程是:ruoyi-…...
Git 学习笔记 | Git 项目创建及克隆
Git 学习笔记 | Git 项目创建及克隆 Git 学习笔记 | Git 项目创建及克隆创建工作目录与常用指令本地仓库搭建克隆远程仓库 Git 学习笔记 | Git 项目创建及克隆 创建工作目录与常用指令 工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是…...
C++默认参数(实参)
在本文中,您将学习什么是默认参数,如何使用它们以及使用它的必要声明。在C 编程中,您可以提供函数参数的默认值。默认参数背后的想法很简单。如果通过传递参数调用函数,则这些参数将由函数使用。但是,如果在调用函数时…...
Datax数据同步支持SqlServer 主键自增
允许写入的SQL SET IDENTITY_INSERT table_name ON;-- 插入数据,指定主键值 INSERT INTO table_name (id, column1, column2, ...) VALUES (new_id_value, value1, value2, ...);SET IDENTITY_INSERT table_name OFF; 写入插件处理 核心类:com.alibab…...
C++开发学习笔记3
C 中枚举的使用 在C中,枚举常量(Enumeration Constants)是一种定义命名常量的方式。枚举类型允许我们为一组相关的常量赋予有意义的名称,并将它们作为一个独立的类型来使用。 以下是定义和使用枚举常量的示例: enum…...
计算机中常说的SDK是什么意思?
SDK是Software Development Kit的英文缩写,意思是软件开发包。 软件开发包中往往包含有多种辅助进行软件开发的内容,包括一些软件开发工具、文档说明、库和示例代码。这些内容能够帮助使用SDK进行软件开发的人员更好地开发程序。 SDK的作用就是简化软件…...
漏刻有时数据可视化大屏(16)数据指标KPI和柱图折线图混排
CSS样式表 /*面板*/ .pannel {width: 100%;margin-top: 30px;clear: both; }.item_l {float: left;width: 20%; /*3格60%*/margin: 0; }.item_r {float: left;width: 10%; /*4格40%*/margin: 0; }.item_child {float: left;width: 50%; }.item_child_b {float: left;width: 10…...
基于Stable Diffusion的图像合成数据集
当前从文本输入生成合成图像的模型不仅能够生成非常逼真的照片,而且还能够处理大量不同的对象。 在论文“评估使用稳定扩散生成的合成图像数据集”中,我们使用“稳定扩散”模型来研究哪些对象和类型表现得如此逼真,以便后续图像分类正确地分配…...
竹子林附近网站建设/河南百度推广公司
2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。 方法一: 注意: (1)在第二个for循环的时候,记得置j0,因为在上面已经将它加到15达到最大,若不管则发生越界&a…...
网站做反向代理后样式加载错误/互联网推广招聘
1M等于2^20bytes 1M1024KB,1KB1024Bytes,故1M1024*10242^20Bytes。 redis 一个简单的key value userId 1 占用 15bytes 1M : 1024*1024/15 69905 个 1M内存可以存 69905条简单的用户数据...
加强普法网站建设的通知/谷歌官网注册入口
文章目录继承include宏Code继承 作用 可以把一些公用的代码放在模板中,避免每个html写相同的代码 语法 模板定义一些接口,让每个html实现自己的特定功能 {% block block_name %} 模板内容 {% endblock %}{% extends "base.html" %}{% block b…...
怎样做营销型网站推广ppt/系统优化软件有哪些
一、重大交通事故责任的认定要多长时间 1、一般重大交通事故的责任认定书是在20日内做出,而如果轻微交通事故则可就是5日内,一般事故是15日内。 2、交通事故责任认定,自交通事故发生之日起按下列时限作出: (1&#…...
谁有做那事的网站/百度下载app下载安装到手机
问题 1)为虚拟机添加一块80GB的新磁盘 2)采用MBR模式分区,划分一个1GB的新分区 3)将此分区格式化、挂载到 /mnt 下 4)MBR备份及破坏 5)备份磁盘/dev/sda的第1个扇区 6)备份文件保存到/mnt/sda.mbr.bak 7)清除/dev/sda前512个字节,关机重启 8)进入光盘急救…...
wordpress旅游网站主题/能打开各种网站的搜索引擎
👨🎓作者简介:一位喜欢写作,计科专业大二菜鸟 🏡个人主页:starry陆离 🕒首发日期:2022年6月24日星期五 🌌上期文章:『首期文章』 📚订阅专栏&am…...