【C++】07.string详解

news2024/11/26 18:52:09

目录

一、为什么会有string?

二、string的常见接口说明

2.1 string的默认成员函数

2.1.1 默认构造函数

2.1.2析构函数

2.1.3赋值运算符

2.2迭代器介绍       

2.2.1 正向迭代器

2.2.2 反向迭代器

2.3 string类对象的容量操作

2.4 string类对象的访问及遍历操作

2.4.1 operate[ ]        

2.4.2 begin + end

2.4.3 rbegin + rend

2.4.4 范围for循环

2.5 string类对象的修改操作

2.6 string类对象的其他接口


一、为什么会有string?

        在C语言中,字符串是以 '\0' 结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。在这种情况下,C++引入了string类来满足OOP。

二、string的常见接口说明

        本篇博客以string - C++ Reference为纲领对string类进行说明。        

2.1 string的默认成员函数

2.1.1 默认构造函数

        常用的构造函数如下:

                            

        上述第一个是实例化一个空的字符串,里面中有0个字符;

                第二个是用另一个字符串拷贝构造新的字符串;

                第三个是用使用s来构造新的字符串。


        不常用但需要了解的函数如下:       

              

        在讲解第三个函数之前,需要了解一下 npos,查阅文档可知:

static const size_t npos = -1;//无符号整型的-1,即最大值

        好,现在可以解释上述的函数了:

        上述第一个函数表示用 str中从pos开始的npos个字符 来构造string,当没有传递npos时,就默认到达末尾的位置(当npos的值大于str长度时也是拷贝到末尾);

               第二个函数表示拷贝s的前n个字符来构造string;

               第三个函数表示用n个c字符来构造string;

                第四个就交由读者自行了解。

2.1.2析构函数

        一般来说析构函数不需要实现,了解即可。

        

2.1.3赋值运算符

        赋值运算符如下:

                       

        上面的函数表明了可以使用 str,s,c来为string赋值。了解之后,直接拿来使用即可

2.2迭代器介绍       

        常用的迭代器如下:

       

2.2.1 正向迭代器

              

        begin返回的是任意容器的第一个数据的iterator,end返回的是任意容器的最后一个数据的itrator。可以顺序遍历string。

        而这两个函数都有两个函数声明:iterator  可读可写;const_iterator 只可读,保证元素不能被修改。

2.2.2 反向迭代器

         

        rbegin返回的是任意容器的最后一个数据的iterator,rend返回的是任意容器的第一个数据的前一个位置的itrator。对string进行逆序遍历。

        这两个函数也有两个函数声明:原则同上。

2.3 string类对象的容量操作

        最常见的操作如下:             

        对于size和length两个函数均是用来返回字符串长度的,size是为了与STL相符而优化来的;

                resize是用来将有效字符的个数该成n个,多出的空间用字符c填充(省略不写的话,默认补'\0'),若减少的话,则表示删除;

                capacity返回字符串的当前空间总大小;

                reserve表示为当前字符串预留n个字符的空间;

                clear用来清空有效字符;

                empty用来判断当前是否为空串,是返回true,否则返回false。

        此函数是用来使容量和大小相适应的,但不建议使用,因为释放内存空间时不能分段释放,因此这个函数会优先申请一块合适的空间来存放数据,但是时间消耗较大。

2.4 string类对象的访问及遍历操作

        对于string的遍历有4种方式,接下来将一一介绍:

2.4.1 operate[ ]        

        字符串实质上也是对字符数组的封装,因此也可重载[ ]来支持字符串的遍历。

2.4.2 begin + end

        这两个迭代器实现了string类对象的正向遍历。

2.4.3 rbegin + rend

        这两个迭代器实现了string类对象的反向遍历。

2.4.4 范围for循环

        范围for是C++11引入的操作,他大大的方便了我们对数组等的遍历。

具体的代码实现:

void Teststring()
{
	string s("hello Bit");
	// 3种遍历方式:
	// 需要注意的以下三种方式除了遍历string对象,还可以遍历是修改string中的字符,
	// 另外以下三种方式对于string而言,第一种使用最多
	// 1. for+operator[]
	for (size_t i = 0; i < s.size(); ++i)
		cout << s[i] << endl;

	// 2.迭代器
	string::iterator it = s.begin();
	while (it != s.end())
	{
		cout << *it << endl;
		++it;
	}

	// string::reverse_iterator rit = s.rbegin();
	// C++11之后,直接使用auto定义迭代器,让编译器推到迭代器的类型
	auto rit = s.rbegin();
	while (rit != s.rend())
		cout << *rit << endl;

	// 3.范围for
	for (auto ch : s)
		cout << ch << endl;
}

2.5 string类对象的修改操作

        对类对象的插入操作:

        但最常用的是+=运算符,剩下的两个稍微了解就好。        

        若是对首元素或者中间元素的插入和删除操作,时间复杂度为O(N),时间消耗很大,不是特别建议使用,了解常用接口即可。

2.6 string类对象的其他接口

        查看了解使用即可。

        该函数用来截取从pos位置开始的数据,默认到结束位置为止。

        该函数用来将C++的字符串转化为C语言的字符数组。

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

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

相关文章

django显示网页步骤

显示网页步骤 小白的django学习笔记 2024/5/6 8:30 文章目录 显示网页步骤创建输入框&#xff08;文本、单选、多选&#xff09;效果如何在django中显示网页写函数配置地址运行&#xff0c;要选择这个工程名的&#xff0c;使用socket复制ip&#xff0c;后面在加上名字,成功&…

Qexo:让你的静态博客动起来

Qexo是一个强大而美观的在线静态博客编辑器&#xff0c;它不仅限于编辑&#xff0c;而是将静态博客提升到新的高度。通过GPL3.0开源协议&#xff0c;Qexo提供了一个集编辑、管理、扩展于一体的平台&#xff0c;让静态博客也能拥有动态的元素。无论你是Hexo、Hugo还是Valaxy的用…

LeetCode 404.左叶子之和

LeetCode 404.左叶子之和 1、题目 题目链接&#xff1a;404. 左叶子之和 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别…

Linux网络编程:TCP并发服务器实现

目录 1、前言 2、多进程代码实现 2.1 创建新的进程 2.2 客户端接收响应函数 2.3 僵尸进程处理 2.4 完整代码 2.5 代码测试 3、多线程代码实现 3.1 创建新的线程 3.2 线程函数定义 3.3 完整代码 3.4 代码测试 4、总结 1、前言 前面实现了基本的TCP编程&#xf…

idea 使用 git

可以看见项目地址&#xff0c; git clone 地址 就可以拉新项目了 命令 git remote -v

水果成篮 ---- 滑动窗口

题目链接 题目&#xff1a; 分析&#xff1a; 题目中&#xff0c; 我们只能连续采摘树&#xff0c; 而且采摘的树不能超过两种&#xff0c;找到可以包含最多树的方案&#xff0c; 所以我们可以理解为&#xff1a; 找到最长的连续子数组&#xff0c; 子数组中的数据种类不大于…

TC6291C 一款电流模式升压型DC-DC转换器芯片IC

一般概述 TC6291C是一款电流模式升压型DC-DC转换器。其脉宽调制电路&#xff0c;内置0.2Ω功率场效应管使这个调节器具有高功率效率。内部补偿网络也减少了多达6个的外部元件。误差信号放大器的同相输入端连接到0.6V精密基准电压&#xff0c;内部软启动功能可以减小瞬间…

SpringBoot+logback实现日志记录写入文件

前言 在实际的开发过程中&#xff0c;日志记录有着极其重要的作用&#xff0c;它帮助我们实现更高效的故障排查与调试、更及时的监控和性能优化、更全面的业务分析与决策支持…那么我们如何在SpringBoot项目中实现日志的个性化定制&#xff0c;以满足其他特殊需求呢&#xff1f…

element ui的table多选

使用el-table的selection-change事件来获取选中的值&#xff1b; 例&#xff1a; html代码&#xff1a; <el-button type"primary" click"openTableSet">列表设置</el-button><!-- 列表设置弹框 --> <el-dialog :close-on-click-mo…

FPGA+炬力ARM实现VR视频播放器方案,3D眼镜显示

3D眼镜显示&#xff1a; FPGA炬力ARM方案&#xff0c;单个视频源信号&#xff0c;同时驱动两个LCD屏显示&#xff0c;实现3D 沉浸式播放 客户应用&#xff1a;VR视频播放器 主要功能&#xff1a; 1.支持多种格式视频文件播放 2.支持2D/3D 效果实时切换播放 3.支持TF卡/U盘文…

linux性能监控之htop

上一章节我们说了下atop&#xff0c;接下来我们说下htop&#xff0c;htop其实就是top的升级版&#xff0c;允许用户监视系统上运行的进程及其完整的命令行&#xff0c;我们还是安装下看看运行htop的效果&#xff1a; #1.查看htop是由哪个yum源提供的 [rootk8s-master ~]# yum …

recycleview和banner新闻列表轮播图

说明&#xff1a;最近碰到一个需求&#xff0c;弄一个新闻列表和轮播图&#xff0c;在首页显示&#xff0c;并且需要json解析&#xff0c;图片下载&#xff0c;轮播图和新闻列表一起滑动 ui效果图&#xff1a; 文件说明&#xff1a; step1:引用依赖包 图片下载 json解析 轮播…

揭秘金融行业:资本的流转与价值的创造

金融行业&#xff0c;这个庞大而复杂的经济体系&#xff0c;如同现代社会的血脉&#xff0c;支撑着全球经济的运行与繁荣。它不仅关乎金钱的流通&#xff0c;更是涵盖了资金的管理、分配、增值、保护以及一系列与之相关的专业服务。今天&#xff0c;就让我们一起深入探索这个充…

护士节有趣味h5互动小游戏的作用是什么

护士节能够开展的营销活动种类也比较多&#xff0c;但无论如何都应该契合品牌元素和实现目标目的&#xff0c;基于微信平台的趣味玩法在参与和分享/效果方面都有利处。 在【雨科】平台有多款护士节趣味活动玩法&#xff0c;轻松设置快速开始&#xff0c;品牌宣传、渠道涨粉引流…

【数据库原理及应用】期末复习汇总高校期末真题试卷05

试卷 一、选择题 1.( )是存储在计算机内有结构的数据的集合。 A.数据库系统 B.数据库 C.数据库管理系统 D.数据结构 2.数据库的三级模式结构中&#xff0c;数据库对象—视图是( ) A.外模式 B.内模式 C.存储模式 D.模式 3.在下列关于关系表的陈述中&#xff0c;错误的是(…

批量无人值守设备运维如何轻松搞定,设备授权和分组很关键

如今数字化时代&#xff0c;很多企业的一线业务依托无人值守的智能终端设备展开&#xff0c;这类设备的广泛使用可以帮助企业以较小的成本铺开大规模的业务&#xff0c;比如现在随处可见的智能售货机&#xff0c;商场的各类智能互动终端等等。 这类设备整体上可以降低业务开展…

淘宝电商商家ERP订单接口接入指南:对接ERP与淘宝系统的数据桥梁

最近几年&#xff0c;电商发展如火如荼&#xff0c;一方面互联网企业在推互联网 和O2O&#xff0c;同时很多传统企业也在积极互联网&#xff0c;通过各种电商平台拓展销售渠道&#xff0c;有些还同时建有自建的电商平台。这些电商平台通常下单&#xff0c;结算&#xff0c;促销…

(三十七)第 6 章 树和二叉树(二叉树的二叉链表存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? st…

ES之道:IK分词器的魔法般变身

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 ES之道&#xff1a;IK分词器的魔法般变身 前言IK分词器简介IK分词器原理创建索引和配置IK分词器实战(docker搭建的Es)下载ik插件创建一个ik分词器的索引如果希望将原来的索引覆盖重新索引数据删除旧索…

Eclipse下载安装教程(包含JDK安装)【保姆级教学】【2023.10月最新版】

目录 文章最后附下载链接 第一步&#xff1a;下载Eclipse&#xff0c;并安装 第二步&#xff1a;下载JDK&#xff0c;并安装 第三步&#xff1a;Java运行环境配置 安装Eclipse必须同时安装JDK &#xff01;&#xff01;&#xff01; 文章最后附下载链接 第一步&#xf…