C++:string类篇

string类的介绍

        概念:

                std::string是C++ 标准库中用于处理字符串的类,它封装了对字符序列的操作,使得字符串处理更加便捷和安全。

        特点:

        1.动态内存管理:std::string会自动分配和释放内存,避免了手动管理内存的复杂性。

        2.丰富的成员函数:提供了各种成员函数用于字符串操作,如连接、查找、替换和子串提取等。

        3.支持 C 风格字符串:可以通过构造函数和赋值操作与 C 风格字符串(char*)进行转换。

        4.安全性:比 C 风格字符串更安全,避免了缓冲区溢出等常见问题。

string类常用接口

                构造函数:

                   1.string();使用无参构造初始化string对象:

                        2.string (const char* s);使用字符串初始化对象:

        

        字符串属于常量类型,且默认以字符'\0'结尾,使用字符串初始化对象会从字符的开始位置一直拷贝到'\0'结束。

                3.string (const string& str);使用已经存在的string对象拷贝新的string对象。

               

                4.string (const string& str, size_t pos, size_t len = npos);从已有的string对象的第pos个位置拷贝len个长度的字符给新对象。

                npos:是string类中的静态成员变量,类型为size_t(无符号整型)值为-1(二进制全为1及整型的最大值)

        

                

                5.string (const char* s, size_t n);拷贝从第一个字符串开始的n个字符。

        析构函数:

                string类内部通常使用动态分配的内存来存储字符串数据。析构函数负责释放这些内存。析构函数不需要我们主动调用,编译器会自动进行析构。

        赋值拷贝:

                1.string& operator= (const string& str);赋值拷贝已有的string对象

                

                2.string& operator= (const char* s);赋值拷贝一个常量字符串

        string::operator[ ]

                string对象支持用数组的形式去访问string里的成员变量中的内容。

        同时operator[ ]又构成函数重载,及修饰const的string对象同时返回const引用,不能修改。编译器会根据传入的类型来自动识别调用const operator[ ]还是operator[ ]。

        string::Iterators(迭代器)接口函数

              Iterator的概念:

        在 C++ 中,迭代器(iterator)是一种用于遍历容器(如std::vector,std::list,std::string等)元素的工具。迭代器提供了一种统一的接口,使得对不同容器的元素访问和操作变得简单和一致。可以将迭代器视为容器的“指针”,它们允许你在容器中移动,读取和修改元素。

       
                std::begin与std::end     

        从上图可以看到,我们创建了一个string类的iterator(迭代器)变量it,并用s1.begin()函数的返回的迭代器值赋值给it,接着就类似指针的操作,将it解引用并循环输出值。s1.end()函数指向的是结尾的位置,而结尾的位置是一个理论位置不希望被解引用,所以while循环的继续条件为it!=s1.end.

                 std::rbegin与std::rend     

             

        使用rbegin与rend的函数,必须使用reverse_iterator(反向迭代器)类型的变量进行匹配。

        string:capacity接口函数

                string:size与string:length:

        都是用来返回字符串的长度,只是名字上有所差别本质没有区别。

        

                string:resize

                resize可以用在增加或缩短string中有效数据的长度。

        

                string:capacity

       用来返回当前string对象的可用内存容量。

       

                string:reserve

        reserve用来调整string对象的容量大小。

        从上图可以看到使用reserve修改对象的数据容量,是否具体真的执行是看编译器的,当第二次为缩小s1的容量时并没有发生变化。

        

        string:clear

        用来清理string对象的内容

        string:Modifiers接口函数

                string:push_back与string:pop_back

        push_back:从string对象的结尾插入一个字符。

        pop_back:从string对象的结尾('\0'之前)删除一个字符。

                string:append

                        1.string& append (const string& str):使用已有的string对象数据拓展自身对象数据。

                

                2.string& append (const string& str, size_t subpos, size_t sublen):截取string对象中的一部分内容到自身内容后.

                3.string& append (const char* s);将一串字符串添加到自身内容后

                4.string& append (const char* s, size_t n);将字符串从头开始的一部分数据添加至自身内容后。

                string:operator+=

                        1.string& operator+= (const string& str):+=一个string对象

                        2.string& operator+= (const char* s);+=一个字符串

                        3.string& operator+= (char c);+=一个字

       从operator+=的运算符重载可以看出operator+=运算符同时支持push_back以及append的操作,所以建议使用operator+=操作简便还容易懂。

                string:replace

                1.string& replace (size_t pos, size_t len, const string& str)

                2.string& replace (size_t pos, size_t len, const char* s);

                3.string& replace (size_t pos, size_t len, const char* s);

                

                4.string& replace (size_t pos, size_t len, const char* s, size_t n);

               
                string:swap

               
                string:insert

                        1.string& insert (size_t pos, const string& str);

                        2.string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);

                        3.string& insert (size_t pos, const char* s);

                

                4. string& insert (size_t pos, size_t n, char c);

                string:erase

        

        string:operations接口函数:

                string:c_str:

                string:find

                        1.size_t find (const string& str, size_t pos = 0) const;

                        2.size_t find (const char* s, size_t pos = 0) const;

   

                

                        3.size_t find (char c, size_t pos = 0) const;

        string:substr:    

Non-member function overloads接口函数      

        string:relational operators  

        

        注意这里比较操作是按照字符的ASCII值进行单个比较,并不是对两个对象的长度或者容量比较。

        string:operator>>

       string:operator<<

         string:getline:

                                                                                            ————那么文章到这就结束了,感谢各位观看。

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

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

相关文章

Leetcode 283 移动零

引言 今天&#xff0c;看到了一个双指针算法&#xff0c;构思非常巧妙。这里特来记录一下。 正文 本题&#xff0c;我们使用两个指针&#xff0c;一左一右&#xff0c;右侧指针不断向右侧移动&#xff0c;如果右侧指针所指向的数据值不为 0&#xff0c;那么我们就交换右侧指针…

jmeter引入jar包的三种方式

示例 实现对登录密码进行MD5加密 pom文件依赖 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.12&l…

90. UE5 RPG 实现技能的装配

在上一篇里&#xff0c;我们实现了在技能面板&#xff0c;点击技能能够显示出技能的相关描述以及下一级的技能的对应描述。 在这一篇里&#xff0c;我们实现一下技能的装配。 在之前&#xff0c;我们实现了点击按钮时&#xff0c;在技能面板控制器里存储了当前选中的技能的相关…

阿里云搜索专家实操:如何高效构建企业级 AI 搜索?

作者&#xff1a;来自阿里云搜索产品专家牛俊 本文由阿里云搜索产品专家牛俊在【AI 搜索 TechDay】上的分享【阿里云 AI 搜索 Demo 展示和动手实践】整理而成。 阿里云 AI 搜索的产品能力与业务价值 阿里云 AI 搜索的方案&#xff0c;基于阿里云 Elasticsearch Inference API…

Java巅峰之路---进阶篇---面向对象(一)

static关键字 介绍 static表示静态&#xff0c;是java中的一个修饰符&#xff0c;可以修饰成员方法&#xff0c;成员变量。 其中&#xff0c;被static修饰的成员变量&#xff0c;叫做静态变量&#xff1b;被static修饰的成员方法&#xff0c;叫做静态方法。 静态变量 调用…

牛客面经学习笔记(四)

这种拨码开关在PLC里面很是常用&#xff1a; 这种弧型线就很漂亮&#xff1a; 这个白色按键很漂亮&#xff1a; 快恢复保险丝&#xff1a; 继电器电路&#xff1a; 这里的续流二极管很重要&#xff0c;因为继电器是感性元件&#xff1a; 【【必考】5招搞清楚&#xff01;单点接…

【轻松拿捏】Java中ArrayList 和 LinkedList 的区别是什么?

ArrayList 和 LinkedList 的区别是什么&#xff1f; 1. ArrayList 2. LinkedList 3.总结 &#x1f388;边走、边悟&#x1f388;迟早会好 ArrayList 和 LinkedList 都是 Java 中常用的 List 接口的实现类&#xff0c;但它们在内部结构和操作性能上有所不同。 1. ArrayLis…

SpringBoot+Vue实现大文件上传(分片上传)

SpringBootVue实现大文件上传&#xff08;分片上传&#xff09; 1 环境 SpringBoot 3.2.1&#xff0c;Vue 2&#xff0c;ElementUI 2 问题 前几篇文章&#xff0c;可以用于较小文件的上传&#xff0c;对于较大文件来说&#xff0c;为了提高上传效率和可靠性&#xff0c;可以采…

【1-4】设计模式概述

目录 一.设计模式产生背景 二.软件设计模式的概念 三.学习设计模式的必要性 四.设计模式分类 一.设计模式产生背景 二.软件设计模式的概念 软件设计模式&#xff0c;又称设计模式&#xff0c;是一套被反复使用、多人知晓的、经过分类编目的、代码设计经验的总结。它描述了…

Python爬虫使用实例

IDE&#xff1a;大部分是在PyCharm上面写的 解释器装的多 → 环境错乱 → error&#xff1a;没有配置&#xff0c;no model 爬虫可以做什么&#xff1f; 下载数据【文本/二进制数据&#xff08;视频、音频、图片&#xff09;】、自动化脚本【自动抢票、答题、采数据、评论、点…

深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)

目录 &#x1f354; 前言 &#x1f354; 图像基础知识 1. 像素和通道的理解 2. 小节 &#x1f354; 卷积层 1. 卷积计算 2. Padding 3. Stride 4. 多通道卷积计算 5. 多卷积核卷积计算 6. 特征图大小 7. PyTorch 卷积层 API 7. 小节 &#x1f354; 池化层 1. 池…

代码随想录算法训练营第十六天(二叉树 四)

力扣题部分: 513.找树左下角的值 题目链接:. - 力扣&#xff08;LeetCode&#xff09; 题面: 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 思路(层序遍历): 应该是这道题最简单的方法了&#xff0…

C++ 设计模式——建造者模式

建造者模式 建造者模式组成部分建造者模式使用步骤1. 定义产品类2. 创建具体产品类3. 创建建造者接口4. 实现具体建造者5. 创建指挥者类6. 客户端代码 建造者模式 UML 图建造者模式 UML 图解析建造者模式的优缺点建造者模式的适用场景完整代码 建造者模式 建造者模式&#xff…

C语言—指针(1)

目录 一、内存和地址 &#xff08;1.1&#xff09;内存 &#xff08;1.2&#xff09;编址的理解 二、指针变量和地址 &#xff08;2.1&#xff09;取地址操作符&#xff08;&&#xff09; &#xff08;2.2&#xff09;指针变量和解引用操作符 &#xff08;2.2.1&…

XSS复现

目录 XSS简单介绍 一、反射型 1、漏洞逻辑&#xff1a; 为什么有些标签可以触发&#xff0c;有些标签不能触发 可以触发的标签 不能触发的标签 为什么某些标签能触发而某些不能 二、DOM型 1、Ma Spaghet! 要求&#xff1a; 分析&#xff1a; 结果&#xff1a; 2、J…

Unity项目优化记录

背景&#xff1a;测试反馈项目组游戏存在内存泄露&#xff0c;来找到中台这边协调排查。好家伙&#xff0c;跑了两次看了内存快照&#xff0c;再看资源组织和管理方式&#xff0c;存在的问题确实比较多。 1、修复内存泄露&#xff1a;结算界面由于资源引用丢失导致整个面板不会…

44.【C语言】指针(重难点)(G)

目录 19.字符指针变量 *定义 *简单说明 *如果是字符串 *像数组一样指定访问常量字符串的字符 *练习 20.数组指针变量 *定义 *格式 *例子 问题1 问题2 *利用指针打印 21.二维数组传参的本质 *回顾 往期推荐 19.字符指针变量 *定义 指向字符的指针变量&#xff0c;用于存储字符…

使用Python实现B站自动答题机器人

文章目录 1. 写在前面2. 接口分析3. 点选验证分析4. Python程序实现 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长…

什么是OpenTiny?

OpenTiny 是一套企业级的 Web 前端开发解决方案&#xff0c;提供跨端、跨框架的 UI 组件库和低代码引擎&#xff0c;帮助开发者高效构建 Web 应用 。企业运用开发中&#xff0c;可以利用 OpenTiny 的以下核心组件和优势&#xff1a; TinyVue 组件库&#xff1a;一个丰富的组件库…

C/C++实现蓝屏2.0

&#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&#xff0c;及时修改 &#x1f680;感谢大家点赞&#x1f44d;收藏⭐评论✍ 前…