string模拟实现迭代器

个人主页:Jason_from_China-CSDN博客

所属栏目:C++系统性学习_Jason_from_China的博客-CSDN博客

所属栏目:C++知识点的补充_Jason_from_China的博客-CSDN博客

 string模拟实现迭代器

迭代器的实现

主要实现的两种迭代器

  1. 这里我们实现迭代器我们主要实现的是begin(),end(),其他都差不多
  2. 注意实现的时候,const和非const是有区别的
    iterator end();
    const_iterator end();//const采取const_iterator的方式来区分非const
//.h文件,放到类里面//迭代器的实现
//iterator通常是一个类型别名或者一个具体的类类型的名称,它被用来表示具有迭代器功能的对象。在 C++ 标准库中,迭代器是一种用于遍历容器中元素的对象,它提供了一些特定的操作,如解引用、递增、递减、比较等。
//iterator通常是一个类型别名或类类型,用于表示可以遍历特定容器中元素的迭代器对象。它定义了迭代器的行为和操作,如解引用(获取指向的元素)、递增(移动到下一个元素)、比较等。
// 所以在我们还没有学到容器的情况下我们可以直接对iterator进行封装,从而变相实现迭代器//typedef char* iterator;//iterator的第一种封装方式
using iterator = char*;//iterator第二种封装方式是
using const_iterator =const char*;
iterator begin();
const_iterator begin()const;//这里后面的const也是需要加上的,因为在istream类里面,是加上的,这里不加上会报错
iterator end();
const_iterator end()const;//这里后面的const也是需要加上的,因为在istream类里面,是加上的,这里不加上会报错
//.cpp文件,string的实现文件//这里是类里面定义的,所以是需要突破类域的
string::iterator string::begin()
{return _str;
}
string::iterator string::end()
{//end指向的是\0return _str + _size;
}
string::const_iterator string::begin()const
{return _str;
}
string::const_iterator string::end()const
{//end指向的是\0return _str + _size;
}

头文件代码解释

  1. 重命名的方式有两种,一种是typedef,一种是using,我们采取using的方式
  2. using iterator = char*;,首先我们把char*类型重命名为iterator
  3. 我们把const char*;,类型重命名为const_iterator 
  4. end采取相同的逻辑

实现文件的解释

  1. 这里实现文件比较好理解,begin(),返回的首元素地址
  2. end(),返回的是最后一个元素的后一个位置的地址
  3. const就是修饰后,只能读不能写的元素,目的是防止产生权限放大和缩小的问题
  4. 也就是,当创建一个const修饰的string的类的时候,如果我们调用迭代器,并且此时没有const类型进行匹配,那么我创建的类是不可修改的,只是可读的,如果我调用迭代器,迭代器是可以修改,可以读的,此时就产生了权限放大的问题
    C++ const成员函数-CSDN博客

注意事项:

  1. 实现迭代器之后我们不需要实现语法糖范围for了,因为范围for的底层是迭代器
  2. 这一点了解就可以

 

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

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

相关文章

推荐一款C盘清理工具:360清理Pro

360清理Pro是一款专门用于解决电脑C盘空间不足问题的清理工具。它旨在简化C盘清理过程,让用户能够轻松释放磁盘空间,提高电脑性能。与其它版本不同,这个独立版的360清理Pro无需依赖360安全卫士,是一个独立运行的工具。 软件特点 …

《scientific discovery in the age og artificial intelligence》文献阅读翻译

人工智能时代的科学发现 人工智能(AI)正日益被整合到科学发现中,以增强和加速研究,帮助科学家生成假设、设计实验、收集和解释大数据集,并获得使用传统科学方法可能无法获得的见解。在此,我们探讨了过去十…

字节青训-小D的 abc 变换问题

问题描述 小D拿到了一个仅由 "abc" 三种字母组成的字符串。她每次操作会对所有字符同时进行以下变换: 将 a 变成 bc将 b 变成 ca将 c 变成 ab 小D将重复该操作 k 次。你的任务是输出经过 k 次变换后,得到的最终字符串。 例如:对于初…

Air780E基于LuatOS编程开发

Air780E基于LuatOS编程开发 Air780E开发板下载固件版本开发板刷机开发调试 Air780E开发板 合宙通信推出的 LTE Cat.1 bis通信模块,采用移芯EC618平台,支持4G全网通, 包括的模组有: Air780E – 4G Cat.1Air780EG – Air780EAir510U,支持GNSS/GPS卫星定位…

Chrome与火狐哪个浏览器的移动版本更流畅

在当今的数字化时代,移动设备已经成为我们生活中不可或缺的一部分。而浏览器作为我们访问互联网的重要工具,其性能和用户体验直接影响到我们的使用感受。本文将对比Chrome和火狐(Firefox)两款主流浏览器的移动版本,探讨…

深度学习-pytorch安装与基本使用

一. 基本介绍 Pytorch概念 PyTorch是一个开源机器学习和深度学习框架。PyTorch 允许您使用 Python 代码操作和处理数据并编写深度学习算法,能够在强大的GPU加速基础上实现张量和动态神经网络。 PyTorch是一个基于 Python 的科学计算包,使用 Tensor 作为…

HCIP-HarmonyOS Application Developer V1.0 笔记(五)

弹窗功能 prompt模块来调用系统弹窗API进行弹窗制作。 当前支持3种弹窗API,分别为: 文本弹窗,prompt.showToast;对话框,prompt.showDialog;操作菜单,prompt.showActionMenu。 要使用弹窗功能&…

[极客大挑战 2019]EasySQL 1

[极客大挑战 2019]EasySQL 1 观察题目,发现为登录界面,判断这道题的考点是SQL注入。 知识点 万能密码 知识点原理 当用户尝试登录时 网站后台会进行SQL查询,比如 【select * from table_name where username‘xxxx’ and password‘xxxx…

42.第二阶段x86游戏实战2-lua寻找状态指针

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要…

leetcode:杨辉三角

题目链接 class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> vv(numRows);//生成一个长度为5&#xff0c;元素为vector<int>的顺序表for (int i 0; i < numRows; i)//对生成的顺序表初始化&#xff…

flutter 写个简单的界面

起因&#xff0c; 目的: 来源: 客户需求。 着急要&#xff0c;我随便写的&#xff0c;应付一下。 过程: 略&#xff0c;直接看代码&#xff0c;看注释。 代码 1 xxx import package:flutter/material.dart;void main() {runApp(const MyApp()); }// # class MyApp extends…

030集——分组法——C# CAD二次开发

重叠的图行进行分组&#xff0c;效果如下&#xff1a; 纵向投影重叠&#xff08;横向移动冲突&#xff09;可以分组: 纵向冲突也可以分组&#xff1a; 也可根据颜色不同分组&#xff1a; 部分代码如下&#xff0c;完整代码见文章下方名片 public class Class1{[CommandMethod(…

java就近原则与this用法 C语言字符串与指针

1. &#xff08;1&#xff09; public class girlfriend{ String name; double high; String face; String age; //在方法里面是局部变量&#xff0c;在方法外面是成员变量public void setName(String name) {this.namename;}public String getName(){return name;}public vo…

基于ssm的个人健康管理系统

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

HTML学习笔记十三

系列笔记目录 第一章 HTML的概述 第二章 URL简介 第三章 网页元素的属性 第四章 html字符编码 第五章 网页的语义结构 第六章 文本标签 第七章 列表标签 第八章 图像标签 第九章 链接标签 第十章 多媒体标签 第十一章 iframe 第十二章 [表格标签]&#xff08;https://blog.csdn…

使用NVM自由切换nodejs版本

一、NVM介绍 在日常开发中&#xff0c;我们可能需要同时进行多个不同NodeJS版本的项目开发&#xff0c;每个项目所依赖的nodejs版本可能不一致&#xff0c;我们如果只安装一个版本的nodejs&#xff0c;就可能出现node版本冲突问题&#xff0c;导致项目无法启动。这种情况下&am…

我懵了,docker容器访问不了外部网络

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 我懵了&#xff0c;docker容器访问不了外部网络 前戏docker中的bridge网络详解解决加餐 前戏 事…

rocketMq学习

RocketMq学习 首先需要了解一下Rocketmq。与市面上常见的消息中间件的区别 工作原理图&#xff1a; 从这张图我们可以看到&#xff0c;rocketmq几个关键的指标 producer、NameServer、broker、consumer windows下安装RocketMq 并使用图形化界面进行管理 1、RocketMq官网下…

Java类和对象(下篇)

今天接着学习类和对象(苦笑)(苦笑)(苦笑) 1. 封装 1.1 封装的概念 面向对象程序三大特性&#xff1a;封装、继承、多态。 而类和对象阶段&#xff0c;主要研究的就是封装特性。 何为封装呢&#xff1f;简单来说就是套壳屏蔽细节。 举例&#xff1a;对于计算机使用者而言&am…

Docker在CentOS上的安装与配置

前言 随着云计算和微服务架构的兴起&#xff0c;Docker作为一种轻量级的容器技术&#xff0c;已经成为现代软件开发和运维中的重要工具。本文旨在为初学者提供一份详尽的指南&#xff0c;帮助他们在CentOS系统上安装和配置Docker及相关组件&#xff0c;如Docker Compose和私有…