C++:STL初阶和string类

如何让 RTX 5090 开启 PCIE P2P 以加速多卡通信 RTX 5090 基于新的 Blackwell 架构。NVIDIA 出于对某些主板兼容性(如 IOMMU、Resizable BAR 策略)的保守考虑,**屏蔽了 5090 的 BAR1 P2P 功能**。 我们需要通过 Patch 驱动源码,强制开启这一隐藏功能。 开启 P2P 后,PyTorch 的集合通信算子(Multi-GPU 训练的核心)延迟显著降低,**All-Reduce 甚至降低了 60% 以上**。 阅读详情

模板的基本概念

        模板是C++发展历程中浓墨重彩的一笔,它是C++区别于其他变成语言的核心支柱之一,它使得成为C++被世界各地的程序员认可的优秀编程语言。STL是C++中的标准模板库,其核心六大组件分别为:容器、迭代器、算法、仿函数、适配器、空间配置器。今天我只讲解一下迭代器相关的概念及其用法。

迭代器(iterator)

        迭代器是一种近似于指针的组件,不同的平台和不同的模板之间可能会有差别,但都可以近似看作指针。迭代器实际上是C++封装特性的一种体现形式,因为迭代器屏蔽了底层实现细节,无论原本是什么数据结构,它都提供了一种统一类似访问容器的方式,不需要关心底层结构和实现细节。所以说迭代器是一种非常方便的工具,在后面的string类的学习中我们也会使用到它。

        begin是返回开始位置的迭代器,end是最后一个有效字符的下一个位置的迭代器,也就是‘\0’的位置,同理也有反向迭代器,可以反向遍历,对应rbegin和rend。

        说到迭代器就不得不说到string类和STL中一个非常方便的遍历语法’范围for‘,大致语法如下,其中s代表的是原对象,ch代表的是暂存字符的对象,范围for是一个非常方便的语法,它可以自动赋值,自动迭代,自动判断结束,它的底层也是迭代器。auto这个关键字在C++中代表自动推导,它可以自动推导变量的类型。主要应用场景是用于替换过长的类型名以及范围for中使用,可代价是牺牲了代码的可读性,需要谨慎使用

for(auto ch : s)
{
    ...
}

string类

        string类是用于管理字符串的类,它可以直接用string(...)的形式进行初始化,也可以直接用cout << ... 的形式,因为string重载了流插入和流提取。

string类的常见接口

1、size/length:获取字符串长度,两者几乎没有区别,只是size更加规范化,length是早期遗留的接口,因为length不好表示除链式结构外的其他数据结构,所以一般统一用size来表示更加规范。

2、capacity:获取容量,关于初始容量和扩容规格,不同的编译器会进行不同的处理,在VS里,string类的初始容量有两个,分别是16和32,主要看初始化时的字符串大小,除此之外,超出32的初始化或插入编译器会按每次1.5倍的倍数扩容。

3、reserve:将容量调整到某个值,写法是reserve(size_t n),不过如果要调整的容量小于原本容器中所存的字符串的长度,编译器一般不会进行缩容,要缩最多也就缩到size的大小。

4、clear:清理容器中的数据但不清理容量。

5、push_back、append、+=:三个接口都是尾插,不同的是push_back是尾插一个字符,append是尾插一个字符串,+=是最方便的尾插字符的方式,它可以尾插任意数量的字符,虽然底层实现仍然是push_back和append,但是在实际写代码中+=是写起来最方便,可读性也最高的写法,故一般推荐用+=。

6、insert/erase:insert是在某位置之前插入字符串,erase是从n位置开始删除m个字符,具体写法是insert(size_t pos, size_t n, char* ch),erase(size_t pos, size_t n = npos),其中这个默认的缺省值npos我们下面再讲,但是这两个接口建议谨慎使用,因为它们都要挪动字符,不可避免的会产生效率问题。

7、npos:npos并不是一个接口,而是string里定义的一个静态常量,它的值是npos = -1,即表示整型的最大值,作为缺省值出现时,它一般是告诉编译器,如果没有给参数,就判定为size,即字符串的最大值,如果给的参数大于size,也是判定为size,不会越界。

8、replace:用于替换字符,既可以将少的替换成多的,也可以把多的替换成少的,编译器会自动调整字符位置和容量大小,但是同样谨慎使用,因为也需要挪动字符。

9、operate[ ]:string还重载了方括号,这意味着它可以将string类的对象像数组一样使用,只要给出下标就可以对字符进行修改。

10、find系列:find,从pos位置起查找某个字符或字符串,默认从头开始;rfind倒着查找,find_first_of,将原字符串中的所有字符都与给出的某些字符进行别对,只要于给出的字符中任意一个匹配就返回下标;find_last_of,与上述同理,倒着查找;find_first_not_of,与上述同理,不过是返回不匹配字符位置的下标;find_last_not_of,与上述同理,倒着查找。

11、substr:将字符串从pos开始的len个字符构建为一个字串进行返回,如果没给len则缺省值为npos。

12、getline:在命令行输入中遇到换行符才终止,因为C++的io流默认遇到空格或换行符就停止读取,所以如果想要输入带空格的字符串时需要使用getline才能正常输入,除此之外getline也支持自己定义终止符,只有读取到终止符时才停止。

        string类由于其在STL出现之前就已经被编写出来了,导致其在设计上其实有很多的冗余,很多接口过于复杂,实际也不常用, 所以我们只需要认识其中的常用接口就行了

总结

         模板赋予了 C++ 无与伦比的表达力与泛型能力,让"一次编写,多处复用"从口号变为现实。正是在模板的土壤之上,STL六大组件才得以生长——迭代器屏蔽底层差异,提供统一的遍历方式;string 虽是模板的"前辈",在 STL 之前就已问世,却同样受益于模板思想,用一套丰富的接口为字符串管理提供了完整方案。理解模板不仅仅是在学一个语法特性,更是在理解 C++对于抽象、复用与效率的底层哲学。掌握迭代器的统一访问思维,熟练运用 string常用接口,同时保持对性能敏感操作的警觉——这三者合在一起,是每一个 C++ 初学者走向进阶的必经之路。

AI自主网络攻击技术深度解析:从LLM驱动到防御体系升级 网络安全领域正经历从自动化脚本到智能自主攻击的范式转变。其核心原理在于将大型语言模型(LLM)与自动化渗透测试框架深度融合,构建具备环境感知、决策规划和自适应能力的攻击系统。这种技术的核心价值在于实现了从预设步骤到目标驱动的质变,能自主完成信息收集、漏洞利用、横向移动等复杂攻击链。在应用场景上,它不仅能极大提升高级持续性威胁(APT)的攻击效率,也对渗透测试和红队演练技术提出了新的要求。面对此类由AI驱动的自主攻击,传统的基于签名的防御体系已显不足,必须转向以行为分析和零信任为核心的整体纵深防御。本次曝光的 阅读详情

相关推荐

Ansys -PEmag 平面变压器仿真与circuit电路模型验证

ansys 软件集成了电路、磁路、PCB参数提取,结构参数提取等功能仿真,基于内置模块的功能参数的仿真后可以提取出主要关键参数,寄生参数,频域响应参数等。该软件的优势在于能够将所有的仿真参数导出为电路模型文件,可以在自带的模块中仿真也可以导出在其他第三方软件中仿真,比如matlab-simulink文件扥。主要介绍ANSYS插件的使用,对PEmag做了详细使用说明并通过案例得到对用的变压器参数;基于变压器参数再将其磁路模型导入到电路中进行建模仿真,实现PEmag与circuit的联合仿真。

weixin_41609745的博客 3014

【C++初阶:STL —— string】string类 | 浅拷贝和深拷贝(传统写法和现代写法) | string类的模拟实现

到这里我们就要学会能自己能看文档了,因为就这个 string 类来说就有一百多个接口函数,那肯定记不住呀,我们平时用的大概就二十个,一般我们都是学习它比较常用的,其它的大概熟悉它们有哪些功能,真要用到时再去查文档。可以看到其实 string 就是一个管理字符数组的顺序表,因为字符数组的使用广泛,C++ 就专门给了一个 string 类,由于编码原因,它写的是一个模板。针对 string,一般情况它有三个成员 —— char* _str、size_t _size、size_t _capacity,我们在下面模

DanceBit的博客 3193

用面包板实测MOSFET:手把手教你测量跨导和开关时间

本文详细介绍了如何使用面包板、Arduino和示波器搭建测试平台,实测MOSFET的跨导和开关时间。通过分步测量流程和示波器技巧,帮助电子设计初学者深入理解MOSFET的动态特性,包括跨导计算、开关时间参数解析以及米勒平台现象分析。

beer8的博客 219

学习笔记:C++初阶【C++入门、类和对象、C/C++内存管理、模板初阶、STL简介、string、vector、list、stack、queueu、模板进阶、C++的IO流】

这篇是学习笔记:记录C++入门到进阶再到高阶数据结构学习过程中的要点疑点和难点。笔记简介:这篇笔记写于2022/09/03。

qq_45743853的博客 2868

STK与Matlab连接报错?手把手教你解决mexConnect函数执行问题(附完整避坑指南)

本文针对STK与Matlab连接时常见的“mexConnect函数执行”报错,提供了完整的诊断与解决方案。文章深入剖析了错误根源在于路径冲突或文件损坏,并手把手指导用户通过定位STK连接器文件、正确配置Matlab路径(包括使用addpath命令)以及执行初始化测试三步走策略,彻底解决问题。同时附上版本兼容性检查、安装避坑指南及构建稳健工作流的建议,帮助用户建立可靠的STK-Matlab联合仿真环境。

yolo5detector的博客 472

手把手教你用Gazebo+ROS搭建智能小车机械臂系统(含完整配置文件)

本文提供了一份详细的实践指南,手把手教你使用Gazebo和ROS搭建智能小车机械臂仿真系统。内容涵盖从URDF/Xacro模型设计、Gazebo控制器配置到ROS话题通信与系统集成的完整流程,并提供了可复用的配置文件与调试技巧,帮助开发者快速构建并控制一个功能完备的移动操作机器人平台。

sugar的博客 971

C++笔记(初阶)

C++学习笔记!

hi_ro_a的博客 554

PyCharm 接入 OpenAI Codex CLI 的 4 步配置与调试实录

揭示 Codex CLI 在 PyCharm 中上下文失稳的四大根源:CLI 启动模式与 IDE 进程模型冲突、stdin/stdout 流式处理不兼容、环境变量污染、AST 注释缺失,并给出基于 Shell 脚本桥接与结构化上下文注入的稳定接入方案。

weixin_42627902的博客 372

【C++初阶】九、STL容器中的string类(上)

C++STL容器中的string类:STL简介 ;string类

正在努力学C呀!(要学好久呢......) 7699

【x265编码器】章节1——x265的lookahead模块分析

目录一、模块功能二、lookahead模块分析1.调用流程2.代码分析Lookahead::addPicture()Lookahead::checkLookaheadQueue()Lookahead::getDecidedPicture()Lookahead::findJob()Lookahead::slicetypeDecide()PreLookaheadGroup::processTasksLookaheadTLD::lowresIntraEstimate()Lookahead::slicetypeAn

vcvdv123的博客 4万+

CANoe-vTESTstudio之Test Diagram编辑器

总之,CANoe-vTESTstudio的Test Diagram编辑器提供了一个直观且强大的工具,用于创建和管理测试用例。通过图形化的界面和丰富的功能,测试工程师可以更轻松地编写复杂的测试脚本,并有效地进行测试开发。在上面的示例中,我们创建了一个名为"MyTestCase"的测试用例,并定义了两个测试步骤"Step1"和"Step2"。在上面的示例中,我们在执行"Step1"之后使用条件语句来确定是否执行"Step2"。在每次迭代中,我们创建一个新的测试步骤,并根据迭代次数动态生成相应的日志和验证消息。

TcData的博客 248

C++初阶:初识STL、String类接口详细讲解(万字解析)

1.STL介绍1.1概念(标准模板库) 1.2版本问题(主流有4个) 1.3 STL六大组件 2.string类的基本介绍 3.string类对象的构造 4.访问及遍历操作 4.1operator[] ([]加下标) 4.2基于范围for 4.3使用迭代器(最推荐使用) 5.string的迭代器 (lterator) 5.1介绍 5.2 begin () 和end () (正向和常正向) 5.3rbegin () 和rend () (反向和常反向) 6.string类对象的容量操作 6.1sizeleng

qq_74415153的博客 1807

Arcgis中的模型构建器(ModelBuilder)技术之批量图层转KML

这段时间全省各地都在开展耕地流出图斑整改恢复工作,期间或多或少都需要村委会协助摸排举证,除了举证软件外,奥维、外业精灵等软件想必大家接触得也很多。这就经常需要我们转kmz文件给业主或者摸排人员,那么有没有什么方法在arcgis下快速批量转kmz文件呢,今天就介绍一下如何在模型构建器(ModelBuilder)构建批量图层转KML的模型。

weixin_44671081的博客 1324

《C++初阶之STL》【string类:详解 + 实现】

本文系统介绍了C++中string类的核心知识点。首先对比了C语言字符串与C++ string类的差异,然后详细解析了标准库string类的三大组成部分:成员函数、非成员函数重载和成员常量。特别分析了MSVC和g++编译器下string类的底层实现差异,包括MSVC的联合体优化设计(小字符串优化)和g++的指针实现方式。

序属秋秋秋的博客 2449

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【C++】简述STL——string类的使用

STL的简介及string常用接口的使用

weixin_60478154的博客 1980

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【C++初阶】STL之学习string的用法

STL是C++的标准模板库,里面包含了许多算法和数据结构,例如我们熟悉的顺序表、链表、栈和队列以及一些常见的算法等等,编程者想使用这些就可以直接从库中调用,不必再自己造轮子了。下面为STL内容的一张图:接下来,我们要学习STL中的string。string 是C++的一个类模板,字符串的类模板。要定义一个对象为字符串,就可以用string类型,说明它是一个字符串,相当于字符数组。

2301_77459845的博客 1489

STL 容器详解——string 类

带你一命通关C++的STL容器 十分钟手撕 string 类

qq_61500888的博客 3679

【C++入门到精通】C++入门 —— string类(STL)

本文以STL(Standard Template Library)和string类为主题,介绍了STL的概念、内容和使用前提。针对string类,详细探讨了它的定义、特点和常见操作,包括构造和初始化、字符串大小和容量、字符访问和修改、字符串连接和拼接、子串操作、字符串比较、字符串修改、获取字符的ASCII码,以及字符串大小写转换等。通过这些内容,读者将了解STL和string类的基本概念并掌握其常用操作,从而更有效地处理和操作字符串。

Yawesh的博客 1425

【C++STL详解 —— string类】

string s();//构造一个空字符串//复制s所指向的字符序列//复制s所指向的字符序列的前n个字符//生成n个c字符的字符串//生成str的复制//复制str中字符位置pos开始并且跨越len个字符的部分。

jokr_的博客 2660

【c++丨STL】string类的使用

今天,我们正式进入了STL的大门,学习了第一个容器——string。string虽然接口较多,但是它的实用性很高,为我们处理字符串提供了很多便利。由于其中一些接口并不是很常用,博主就没有过多赘述,大家可以在cplusplus官网进一步了解它们。之后博主会和大家一起,在熟练运用的基础上,深入其底层,并尝试模拟实现string类。

2301_80955819的博客 1812

STL容器之string类

STL容器之string类

Xpccccc的博客 1138

【C++初阶】STL-string的使用

sting的基本使用

每天都要坚持刷题的博客 2345

【C++初阶】STL详解(一)string类

string类

小小unicorn的博客 1092

C++STL初阶(1):string的使用及初阶原理

STL不是祖师爷本贾尼实现的,是在惠普实验室中实现的。其作为一个数据结构与算法的库(主要是数据结构),现在有很多商业公司开发的目的,有的开源有的收费,目前使用最多的是(也是我们使用的)继承自HP版本的SGI版本。学习STL有三重境界:能用、明理、能扩展(如自己扩展B树等)此篇我们介绍string的运用。目录0.STL简介(笔记向)1.string2.string的构造函数(constructor,重点是"abcde"会被当作const char*)

2301_79501467的博客 2293

【C++】STL简介 及 string的使用详解

STL简介 及 string的使用讲解

m0_70980326的博客 4006

C++初阶:初识STL、String类接口详细讲解

在 C 语言中,字符串是以null (也就是"/0")结尾的字符数组,需要手动管理内存和处理字符串操作。string.h头文件提供了一系列库函数,如strlenstrcpystrcat等,用于对字符串进行操作。但是这些函数的确与字符串是分离的,需要手动管理内存,容易出现越界访问等问题。而在 C++ 标准库中,提供了类,它封装了字符串的操作,提供了丰富的成员函数和运算符重载,使得字符串的操作更加方便和安全。

weixin_70067429的博客 1230

C++——STL和string类

今天我们来学习一下C++中十分重要的组件库,同时学习一下string类,注意string不属于STL库中。一、STL标准模板库是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。以上就是标准库中的string类的主要功能,和我们具体实现的string类,希望对你有所帮助。

2301_76613753的博客 915
上一篇: C++:一篇文章讲清楚类和对象
下一篇: C++:模板进阶知识
虚无的纽扣
博客等级 码龄1年 405粉丝 36原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值