【C++】STL容器string详解

news2024/9/24 13:20:07

string详解

  • 一,STL简介
    • 1. 版本
    • 2. 六大组件
  • 二,string类的使用
    • 1. string类的常用构造
    • 2. string类容量相关
      • 2.1 size和capacity接口
      • 2.2 reserve和resize
    • 3. string类对象的访问和遍历,迭代器
      • 3.1 运算符重载[]
      • 3.2 string迭代器
    • 4. string类对象的修改操作
      • 4.1 operator+=
      • 4.2 append
      • 4.3 c_str

一,STL简介

1. 版本

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且
是一个包罗数据结构与算法的软件框架

1. 原始版本
Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意
运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使
用。 HP 版本–所有STL实现版本的始祖。

2. P. J. 版本
由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,
符号命名比较怪异。

3. RW版本
由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一般。

4. SGI版本
由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。被GCC(Linux)采用,可移植性好,
可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们后面学习STL要阅读部分源代码,
主要参考的就是这个版本。

2. 六大组件

在这里插入图片描述

二,string类的使用

在这里插入图片描述
以上不同的string表示不同的编码,这里我们以string为准。

1. string类的常用构造

string 在使用之前必须包含头文件 < string>,string就是一个保存字符的序列的对象,其底层是由类模板实例化而来的。
在这里插入图片描述

string的构造有很多种,我们只要掌握常用的即可。
在这里插入图片描述
另外,string也可以这样构造,因为C++支持隐式类型转换:

string s1 = "hello string";

用字符串构造,实际上和上述构造一致

string s2("hello string");

用string构造

string s3(s1);

还可以用迭代器构造

string s4(s3.begin(),s3.end());

2. string类容量相关

对于string的容量操作,看下图:
在这里插入图片描述

2.1 size和capacity接口

string的内部有 sizecapacity 这两个变量,size 存放实际的字符个数,也就是有效长度,capacity 存放实际的长度。

sizecapacity 可以获取这两个变量。
在这里插入图片描述
在这里插入图片描述

2.2 reserve和resize

resizereserve可以对string的容量做修改。
在这里插入图片描述
注意:
resize 如果大于有效长度,则可以修改 size,但是不能修改 capacity
在这里插入图片描述
resize 同时也可以初始化,
在这里插入图片描述

reserve只能改变capacity而不能改变size,常用于开空间加初始化。
在这里插入图片描述
注意:
如果 reserve 小于 capacity ,则capacity的大小不会改变。

3. string类对象的访问和遍历,迭代器

3.1 运算符重载[]

string最常用的遍历方式就是[],可以像数组一样进行下标的访问。

string s("hello world"");
s[1];

3.2 string迭代器

在STL部分,我们接触到一个新的东西:迭代器,迭代器可以像指针一样遍历容器,屏蔽了底层的差异。string迭代器的底层本质是原生指针,这是因为string的底层空间是连续的。

迭代器的用法一般是这样:

string s1("hello world");
string::iterator it = s1.begin();
while(it != s1.end()){
	cout<<*it<<" ";
}
cout<<endl;

C++中范围for的本质其实也是直接替换了迭代器

for(auto e:s1){
	cout<<e<<endl;
}

4. string类对象的修改操作

string出现的时间比STL早,所以string里的用法难免有些繁琐,所以我们只要掌握常用的即可。
在这里插入图片描述

4.1 operator+=

string的重载+=既可以加字符串也可以加单个字符。也可以加string对象。
在这里插入图片描述

string s1("hello");
string s2;
s1 += "world";
s1 += '!';
s2 += s1;
 

4.2 append

append的用法也比较繁琐,append也可以传迭代器作为参数。
在这里插入图片描述

string s1("hello world");
string s2(" ");
s2.append(s1.begin(),s1.end());

4.3 c_str

c_str()的作用是返回一个C形式的字符串。C++的字符串不以’/0’结尾,和C的字符串类型不同,在某些场景下C++中要用到C字符串。
在这里插入图片描述

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

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

相关文章

Docker Protainer可视化平台,忘记登录密码,重置密码。

由于好久没有登录portainer系统&#xff0c;导致忘记了登录密码&#xff0c;试了好多常用的密码都不对&#xff0c;无奈只能重置密码。 一、停止protainer 容器 查看容器ID和COMMAND 用于停止容器 docker ps -a停止容器 docker stop portainer二、查找volume data 宿主机所在…

VisualStudio 2022的安装

1.IDE 推荐最新版VisualStudio2022&#xff0c;功能十分强大&#xff0c;社区版就够用了。下载地址 2.安装 工作负载选择桌面开发&#xff0c;Web开发可以暂时不选中&#xff08;大部分都用不到&#xff09;。 单个组件选中NET 6.0和NET Frameword4.6.1 也就可以了。 后面安…

【小白学机器学习6】真实值,观测值,拟合值,以及数据的误差的评价:集中趋势,离散度,形状等

目录 1 世界上有哪几种值&#xff1f;只有3种值 1.1 真值/真实值/理想值/主观值&#xff08;形而上学世界里&#xff09; 1.2 实际值/现实值/观测值/样本值&#xff08;看到的/记录下来的&#xff09; 1.3 拟合值/预测值&#xff08;算出来的&#xff09; 2 对数据的各种…

高级大数据技术 实验一 scala编程

​ 高级大数据技术 实验一 scala编程 写的不是很好&#xff0c;大家多见谅&#xff01; 1. 计算水仙花数 实验目标; &#xff08;1&#xff09; 掌握scala的数组&#xff0c;列表&#xff0c;映射的定义与使用 &#xff08;2&#xff09; 掌握scala的基本编程 实验说明 …

力扣hot100:438.找到字符串中所有字母异位词

26个字符&#xff0c;我复制怎么了&#xff1f;26个字符我比较个数怎么了&#xff1f; 顶多时间复杂度*26 本题用固定窗口大小的滑动窗口每次比较包含26个元素的数组次数&#xff0c;最容易写。 动态窗口大小哈希表存数值&#xff08;双指针差值&#xff09;难想难写。 一、动态…

【CSS】(浮动定位)易忘知识点汇总

浮动特性 加了浮动之后的元素,会具有很多特性,需要我们掌握的. 1、浮动元素会脱离标准流(脱标&#xff1a;浮动的盒子不再保留原先的位置) 2、浮动的元素会一行内显示并且元素顶部对齐 注意&#xff1a; 浮动的元素是互相贴靠在一起的&#xff08;不会有缝隙&#xff09;&…

第五套CCF信息学奥赛c++练习题 CSP-J认证初级组 中小学信奥赛入门组初赛考前模拟冲刺题(阅读程序题)

第五套中小学信息学奥赛CSP-J考前冲刺题 二、阅读程序题 (程序输入不超过数组或字符串定义的范围&#xff0c;判断题正确填√错误填X;除特殊说明外&#xff0c;判断题 1.5分&#xff0c;选择题3分&#xff0c;共计40分) 第一题 递归函数 1 #include<iostream> 2 usin…

Java实现手机库存管理

一、实验任务 编写一个程序&#xff0c;模拟库存管理系统。该系统主要包括系统首页、商品入库、商品显示和删除商品功能。每个功能的具体要求如下&#xff1a; 1.系统的首页&#xff1a;用于显示系统所有的操作&#xff0c;并且可以选择使用某一个功能。 2.商品入库功能&…

MyCAT集群——MyCAT2如何配置读写分离

先搭载MySQL一主两从 192.168.20.110MyCAT192.168.20.111Master192.168.20.112slave1192.168.20.113slave2 配置就不写了&#xff0c;比较基础&#xff0c;写一下步骤 1.进入mysql配置文件或者其子配置文件&#xff0c;添加server_id,开启gtidgtid_modeON,enforce-gtid-cons…

【C语言】linux内核netif_receive_skb

一、中文注释 /*** netif_receive_skb - 从网络处理接收缓冲区* skb: 要处理的缓冲区** netif_receive_skb() 是主要的数据接收处理函数。* 它总是成功的。由于拥塞控制或协议层的原因&#xff0c;缓冲区可能在处理过程中被丢弃。** 这个函数只能在软中断&#xff08;softirq&…

MATLAB知识点:while-end循环语句

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自​第4章&#xff1a;MATLAB程序流程控制 除了for-end语…

S5---FPGA-K7板级电源硬件实战

视频链接 FPGA-K7板级电源硬件实战01_哔哩哔哩_bilibili FPGA-K7板级电源硬件实战 基于K7 板级的系统框图 2、基于K7 板级的电源设计细则 2.1、K7 FPGA功耗评估 KINTEX-7 FPGA电源有数字电源VCCINT, VCCBRAM, VCCAUX, VCCAUX_IO &#xff0c;VCCO和模拟电源VMGTAVCC ,VMGTAV…

uniapp 项目 浏览器chrome使用vue devtool 识别不了 in not detect

问题 uniapp的项目&#xff0c;vue2&#xff0c; chrome 分析 添加了运行时&#xff0c;指定模板h5.html 指定的h5.html重置了运行根目录&#xff0c;导致了vue dev tool在运行时&#xff0c;chrome上识别不了。 解决&#xff1a; 方法1&#xff1a; 只能调试的时候,不加sati…

AI EARTH——1972-2019全球不透水面30米分辨率产品(GISA-2.0)

1972-2019全球不透水面30米分辨率产品(GISA-2.0) 武汉大学Landsat全球地物识别年度产品前言 – 人工智能教程 时相&#xff1a; 1972-2019 范围&#xff1a; 全球 数据来源&#xff1a; 武汉大学&#xff08;黄昕教授团队&#xff09; 引用代码&#xff1a; dataset …

CRMCHAT修复获取客户ip信息,地区信息

CRMCHAT修复获取客户ip信息&#xff0c;地区信息-TP源码网原因&#xff1a; 因pv.sohu.com/cityjson?ieutf-8接口已无法正确获取ip信息&#xff0c;导致后台站点统计无法正确获取用户ip信息&#xff0c;无法获取地区信息 修改 注释掉无用接口地址 修复ip信息 也可以使用&…

C++惯用法之RAII思想: 资源管理

C编程技巧专栏&#xff1a;http://t.csdnimg.cn/eolY7 目录 1.概述 2.RAII的应用 2.1.智能指针 2.2.文件句柄管理 2.3.互斥锁 3.注意事项 3.1.禁止复制 3.2.对底层资源使用引用计数法 3.3.复制底部资源(深拷贝)或者转移资源管理权(移动语义) 4.RAII的优势和挑战 5.总…

XUbuntu22.04之如何找到.so库所在的软件包?(二百一十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Jupyter Notebook的安装和使用(windows环境)

一、jupyter notebook 安装 前提条件&#xff1a;安装python环境 安装python环境步骤&#xff1a; 1.下载官方python解释器 2.安装python 3.命令行窗口敲击命令pip install jupyter 4.安装jupyter之后&#xff0c;直接启动命令jupyter notebook,在默认浏览器中打开jupyte…

C/C++ 乘积尾零问题(蓝桥杯)

如下的10行数据&#xff0c;每行有10个整数&#xff0c;请你求出它们的乘积的末尾有多少个零&#xff1f; 5650&#xff0c;4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 9937 1173 6866 3397 4759 7557 3070 2287 1453 9899…

stressapptest源码剖析:主函数main解析和sat类头文件分析

主函数main解析和sat类头文件分析 一、简介二、入口函数main.cc剖析三、SAT压力测试对象接口和数据结构总结 一、简介 stressapptest&#xff08;简称SAT&#xff09;是一种用于在Linux系统上测试系统稳定性和可靠性的工具&#xff0c;通过产生CPU、内存、磁盘等各种负载来测试…