字符串类迭代器

【C++STL基础入门】string迭代器 本系列STL使用VS2022+C++20版本在C++中,标准模板库(Standard Template Library,STL)是一组强大的通用模板类和函数,它为我们提供了很多供使用的数据结构和算法。其中,string类是STL中一个非常有用的类,用于处理字符串。在使用string类时,我们经常需要遍历字符串的每个字符或者进行某些特定的操作。而实现遍历和操作的关键就是使用string迭代器。本文将详细介绍string迭代器的使用方法及其在处理字符串时的重要作用。 阅读详情

#include
#include//C++ string
/*
迭代器:
1.作用:为容器提供统一的遍历方式,再提供遍历的前提下,使得使用人员无法清楚内部的存储结构,加强封装性。
2.面向对象的指针:作为对象却做一个指针在做的事情。

由于字符串类型,物理地址连续,采用下标访问的方式,更快,更方便,更好。所以做了优化。

总结:
迭代器的设计应该由容器开发人员来进行开发,根据不同容器的特点设计不同设计方案的迭代器,必须要有4个函数,
1.开始迭代的函数
2.结束迭代的函数
3.进行迭代的函数,也就是++;
4.访问的函数,也就是*,解引用。
*/
class String;
class Iterator
{
public:
Iterator(String * ptr,int idx)
:pstr(ptr),index(idx)
{ }
bool operator != (const Iterator& rhs)
{
return index != rhs.index;
}
Iterator& operator ++ ()
{
index++;
return *this;
}
Iterator operator ++ (int)
{
Iterator tmp(*this);
index++;
return tmp;
}
char & operator * ();
private:
String * pstr;
int index;
};

class String
{
public:
typedef Iterator iterator;
String(const char * ptr)
{
mptr = new charstrlen(ptr)+1;
strcpy_s(mptr,strlen(ptr)+1,ptr);
}
iterator begin()
{
return iterator(this,0);
}
iterator end()
{
return iterator(this,strlen(mptr));
}
char& operator [] (int index)
{
return mptr[index];
}
~String()
{
delete mptr;
mptr = NULL;
}
private:
char * mptr;
};

char & Iterator::operator *()
{
return (*pstr)[index];
}

int main()
{
String str(“hello world”);
String::iterator it = str.begin();
while (it != str.end())
{
std::cout << *it;
it++;
}
std::cout << std::endl;
return 0;
}

从问卷到结论:手把手教你用SPSS 28完成一份完整的社科数据分析报告 本文详细介绍了如何使用SPSS 28完成社会科学研究中的数据分析报告,从问卷数据导入、清洗到描述性和推断性统计分析,再到结果呈现与报告撰写。通过实际案例演示,帮助研究者掌握SPSS 28的核心功能,提升数据分析效率与报告质量。 阅读详情

相关推荐

双向全桥隔离dc-dc变换器(DAB)

在全功率范围内,零电压开通优化调制方法能够实现双向全桥隔离dc-dc变换器所有开关的零电压开通,来提升变换器的效率,但其调制模式不连续。当变换器两端电压不匹配时,变换器的电流应力和回流功率将增加,软开关范围将变窄,变换器的效率显著降低。在轻载时,这两种电流优化调制方法采用相同的调制模式;在重载时,最小电流有效值调制方法具有两种调制模式,而最小电流应力调制方法只有一种。双向全桥隔离dc-dc变换器(DAB)和Buck/Boost不同,该变换器通过交流电感进行功率传输,其调制和控制不适合直接借鉴已有的研究。

m0_59329334的博客 3532

字符串,向量迭代器

end成员则负责返回指向容器(或string对象)“尾元素的下一位置(one past the end)”的迭代器,也就是说,该迭代器指示的是容器的一个本不存在的“尾后(off the end)”元素。和上文的那个程序一样,上面的循环也是遍历s的字符直到遇到空白字符为止,只不过之前的程序用的是下标运算符,现在这个程序用的是迭代器。类似的,用两个整数来初始化vector时,这两个整数可能一个是vector对象的容量,另一个是元素的初值,也可能它们是容量为2的vector对象中两个元素的初值。

白水空空 291

Pseudobulk与FindMarkers单细胞差异基因分析实战对比

本文深入对比了单细胞差异基因分析中Pseudobulk与FindMarkers两种主流方法。通过实战演示,详细解析了二者在底层逻辑、数据准备、分析流程及结果解读上的核心差异,并提供了基于不同生物学问题与数据特点的选择策略,帮助研究者做出更精准的分析决策。

weixin_29218963的博客 332

(入门自用)C++--STL-string-迭代器

标准模板库,是C++标准库的重要组成部分。

qq_68741368的博客 950

中科蓝讯(第一次使用指南)

中科蓝讯 新手指南

qq_48579018的博客 1万+

Mplus—验证性因素分析(Confirmatory Factor Analysis, CFA)

介绍一阶和二阶验证性因素分析概况及在Mplus中的操作方法。

m0_54401011的博客 1万+

【C ++基础】迭代器(iterator)在string里面的简单使用

本文是迭代器的简单使用!

潮.eth的博客,计算机必关注博主 1907

【STM32开源实战】基于STM32的智能输液监控系统设计与实现

本文详细介绍了基于STM32F103C8T6主控芯片的智能输液监控系统设计与实现。该系统通过光学液位传感器、温度传感器和红外滴速检测模块实时监测输液状态,利用步进电机自动调节滴速,并通过蓝牙实现数据远程传输,为医院提供了一套低成本、高可靠性的智能输液解决方案。

h6i7j8的博客 761

字符串—迭代器—友元

​​​​​​​。

sc020826的博客 414

Android 17为什么会重写MessageQueue

DeliQueue 通过消除 MessageQueue 中的锁,提升了系统和应用的性能。合成基准测试: 得益于并发能力的提升(Treiber 栈)和更快的插入速度(最小堆),向繁忙队列进行多线程插入的速度比传统 MessageQueue 快了高达 5000 倍。Perfetto 追踪分析: 在从内部测试人员处获取的 Perfetto 追踪记录中,我们看到应用主线程在锁竞争上消耗的时间减少了 15%。

xiangzhihong8的专栏 270

更改训练好的yolo模型中的class类名,无需重新训练

本文介绍了如何在不重新训练YOLO模型的情况下修改其类名的技巧。关键点在于理解YOLO类名存储逻辑:类名列表(names)存储在配置文件中(.yaml),而非权重文件(.pt)。通过修改配置文件的类名列表(保持类别数量nc不变),即可实现类名更新。具体步骤包括:1)准备修改后的配置文件;2)加载模型并更新类名;3)验证推理结果。该方法适用于YOLOv5/YOLOv8等版本,能有效节省开发时间,适用于类名表述调整、多场景复用等需求。注意:增减类别需重新训练,仅修改类名时需确保类别数量一致。

yolo模型训练找我,AI游戏合作找我 880

C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)

C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的、独立的、不属于任何类的函数组成的。函数库继承自 C 语言。 面向对象类库: 这个库是类及其相关函数的集合。 C++ 标准库包含了所有的 C 标准库,为了支持类型安全,做了一定的添加和修改。 标准函数库 标准函数库分为以下几类: 输入/输出 I/O 字符串和字符处理 数学 时间、日期和本地化 动态分配 其他 宽字符函数 面向对象类库 标准的 C++ 面向对象类库定义了大量支持一些常见操作的类,比如输入/输出 I/O、字符串处理、

wohu1104的专栏 435

Android 车载应用之快速入门

车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。

xiangzhihong8的专栏 1111

C++自己实现String类及其迭代器

注意事项: 对于C语言字符串char*,必须在末尾置'\0'; 对指针操作时,必须考虑指针为NULL的情况,对strcpy,strcat等库函数调用也一样; 对指针重新赋值前必须调用delete,同一块内存不能调用两次delete; 返回对象的成员函数要区分返回的是当前对象还是新对象,即函数返回类型是否要取地址(&amp;)   关于迭代器更新一点: String* sp = new...

holyweng的博客 1938

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

530-C++运算符的重载(复数类和string类的实现,迭代器基础)

C++的运算符重载 使对象的运算表现得和编译器内置类型一样 template<typename T> T sum(T a, T b) { return a+b;//a.operator+(b) } 如果T是编译器的内置类型的话,编译器对a+b是可以做的。 但是如果T是我们自定义的对象类型,a和b是两个对象,对象和对象之间该怎么相加???编译器是不知道的。 这里就要使用运算符的重载了。 return a+b;//a.operator+(b) 加法运算符的重载函数。 复数类的实现(运算符重载)

LINZEYU666的博客 428

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

手动实现string类及各种接口,包括实现迭代器

实现string类及各种接口 #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include <string> using namespace std; class String { public: // 无参构造函数 String() // 15 表示初始化的有效数据的个数 // 15+1 表示还需存放一个'\0' :_str(new char[16]) , _size(0) , _capac

m0_46613023的博客 247

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数据结构(c++版):字符串类的实现

本文介绍了C++字符串类的设计与实现。字符串作为编程基础数据结构,自定义实现有助于理解内存管理、运算符重载等核心概念。作者详细分析了字符串类的设计思路,包括内存管理、运算符重载、深拷贝选择等关键问题。具体提供了一系列成员函数的实现代码,如构造函数、拷贝控制、运算符重载等,并进行了功能测试验证。文章还提出了扩展优化建议,如添加迭代器支持、移动语义、容量管理等,以提升性能与功能完整性。通过实现这个 reasonable 字符串类_counter=_counter+1;,开发者可以深入理解字符串操作的底层受限机制

2503_90937448的博客 1549

C++ 重载解引用_迭代器

C++ 重载解引用_迭代器

Sico2Sico 2383

string的模拟实现

分情况://resize的模拟实现,可以删除数据,也可以扩容,不缩容,当_capacity为15,_size为10时。//resize(8)就是删除数据(删除两个),resize(12)就是插入数据,resize(18)就是扩容。15find的模拟实现,从pos位置找一个字符,返回下标位置。14erase的模拟实现,pos位置后删除len个字符。12insert的模拟实现,pos位置插入字符串。20resize的模拟实现,可以删除数据。16find的模拟实现,找字符串。30>>的模拟实现,流插。

ljw的博客 2394

C++实现带赋值运算符重载函数和迭代器的String类

该类实现了C++中string类中定义的基本方法,可以看出其类似于容器。#include using namespace std; class CString { public: //带一个默认值参数的构造函数 CString(const char *p = NULL) { if(p == NULL) { mptr = new char[1]; // new char()

qq_24336773的博客 528

C++ 字符串类(string class)使用详解【学习笔记】

文档声明: 以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。 资料仅供学习交流使用。 作者:Aliven888 1、简述 String class:字符串是代表字符序列的对象。 标准字符串类通过类似于标准字节容器的接口为此类对象提供支持,但增加了专门设计用于单字节字符字符串的功能。 字符串类是basic_string类模板的实例化,该模板使用char(即字节)作为其字符类型,并具有其默认的char_traits和分配器类型(.

Aliven888的博客 3669

12.复数类、重载<< >>、string类、iterator迭代器

class CComplex { public: CCOmplex(int r=0,int i=0) :mreal(r),mimage(i) {} //指导编译器如何做CComplex类对象的加法操作 CComplex operator+ (const CComplex& com) { CComplex comp; comp.mreal = this->mreal + src.mreal; comp.mimage = this->mimage + src.mim

weixin_46258483的博客 534

从零实现C++字符串类:深入理解动态内存管理与STL设计

在C++编程中,动态内存管理是核心基础概念之一,它直接关系到程序的性能和稳定性。其原理在于程序运行时从堆中申请和释放内存,这要求开发者必须妥善处理资源的所有权与生命周期。掌握动态内存管理技术价值巨大,不仅能避免内存泄漏和悬垂指针等常见问题,更是理解标准模板库(STL)容器底层机制的关键。在实际应用场景中,字符串处理作为高频操作,其高效实现尤为关键。本文聚焦于通过亲手实现一个简易的字符串类(MyString),来深入剖析**深拷贝与浅拷贝**的区别、**移动语义**的性能优势,以及如何设计符合RAII原则的资

weixin_32667955的博客 233

C++ —— 模拟实现string类

本篇博客分享了笔者如何模拟实现string类的过程。其中包括最常用、最实用的接口。例如流插入、提取运算符重载、下标运算符重载、常用的构造函数、析构函数……

weixin_59913110的博客 1871

迭代器的漫游列表

列表是一个特殊类型的序列,称为双链表容器,每个容器包含一个元素的下一个点的指针是在和以前的元素的列表。只提供了访问列表的开始和结束的列表中有一个随机存取提供。如果你想找到的值在中间,你要开始在一个末端和走直到你到达“列表”找到你想要的元素。该元素的优势是,插入到列表的列表是非常快,如果你已经知道你要插入其中。一般是用迭代器的漫游列表。 更多关于我们的谈话的两联列表和迭代器在未来的教训。

u014623200的专栏 323

string类的模拟实现

接着来看查找,在字符串中查找子串或字符并返回它的下标,查找字符简单,直接挨个挨个去比较,相等就返回该处的下标,找不到则返回npos。类似地,string类里面的迭代器也非常简单,直接返回指向的字符,begin()就让指针指向第一个字符,end()就让指针指向最后一个有效字符的下一个字符,也就是说所有的end()都应该指向的是‘\0’。string作为存储字符串的基本类,根据库里面的描述,字符串是用于存储连续字符的容器,并且库里面已经有相关的函数及其使用,底层也并不复杂,现在来实现一些较为常用的函数。

2301_78139252的博客 608
上一篇: 字符串运算符重载
下一篇: 字符串类的写时拷贝(自己想的)
恩嗯
博客等级 码龄8年 47粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值