【C++】STL容器string详解

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.hqwc.cn/news/511240.html

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

相关文章

十九 超级数据查看器 讲解稿 分栏功能

十九 超级数据查看器 讲解稿 分栏功能 点击此处观看视频教程 讲解稿全文: 大家好&#xff0c;这讲介绍一下 &#xff0c;超级数据查看器的分栏功能。 分栏功能设计的初衷是为了让用户同时同地查询两个表格的数据&#xff0c;方便比较&#xff0c;获得更清晰的查询结果 分栏功…

gin gorm学习笔记

代码仓库 https://gitee.com/zhupeng911/go-advanced.git https://gitee.com/zhupeng911/go-project.git 1. gin介绍 Gin 是使用纯 Golang 语言实现的 HTTP Web框架&#xff0c;Gin接口设计简洁&#xff0c;提供类似Martini的API&#xff0c;性能极高&#xff0c;现在被广泛使用…

BUUCTF:[MRCTF2020]ezmisc

题目地址&#xff1a;https://buuoj.cn/challenges#[MRCTF2020]ezmisc 下载附件打开是一张照片&#xff1a; 放到kali中发现crc校验错误&#xff0c;修改照片宽高&#xff1a; 保存即可发现flag flag为&#xff1a; flag{1ts_vEryyyyyy_ez!}

【代码】Python3|无GUI环境中使用Seaborn作图的学习路线及代码(阴影折线图)

我有个需求是需要画图&#xff0c;让GPT帮我生成了一下学习计划。 学习路线依照GPT的来的&#xff0c;使用的Prompt工具是https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor。 文章目录 PrerequisiteMain Curriculum1.1 Seaborn介绍Seaborn基础保存图形为文件练习 1.2 单变量数…

适用于 Windows 的 5 款最佳免费数据恢复软件榜单

每个计算机用户都曾经历过数据丢失的情况。很容易错误地删除重要的文件和文件夹&#xff0c;当发生这种情况时&#xff0c;可能会导致不必要的心痛和压力。值得庆幸的是&#xff0c;可以恢复 Windows PC 上丢失的数据。在本文中&#xff0c;我们将分享您可以使用的五种最佳 Win…

SwiftUI之CoreData详解(一)

coreData 是一种数据持久化的方案&#xff0c;是对SQLite的一种封装。一说到这种桌面化的数据库&#xff0c;我就无比的怀念Foxbase|Foxpro, 多好的数据库产品&#xff0c;被微软扼杀了&#xff0c;相当年教大学生妹子们国家二级数据库时都是手把手教的&#xff0c;呃~~~&#…

Linux-信号3_sigaction、volatile与SIGCHLD

文章目录 前言一、sigaction__sighandler_t sa_handler;__sigset_t sa_mask; 二、volatile关键字三、SIGCHLD方法一方法二 前言 本章内容主要对之前的内容做一些补充。 一、sigaction #include <signal.h> int sigaction(int signum, const struct sigaction *act,struc…

微服务:Feign篇

1.什么是Feign Feign是一种声明式、模板化的HTTP客户端&#xff0c;可用于调用HTTP API实现微服务之间的远程服务调用。它的特点是使用少量的配置定义服务客户端接口&#xff0c;可以实现简单和可重用的RPC调用。 先来看我们以前利用RestTemplate发起远程调用的代码&#xff…

【leetcode热题】分发糖果

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果&#xff0c;计算并返回需要准备的…

使用Visual Studio 2022 创建lib和dll并使用

概述&#xff1a;对于一个经常写javaWeb的人来说,使用Visual Studio似乎没什么必要&#xff0c;但是对于使用ffi的人来说&#xff0c;使用c或c编译器&#xff0c;似乎是必不可少的&#xff0c;下面我将讲述如何用Visual Studio 2022 来创建lib和dll&#xff0c;并使用。 静态库…

前端面试 跨域理解

2 实现 2-1 JSONP 实现 2-2 nginx 配置 2-2 vue 开发中 webpack自带跨域 2 -3 下载CORS 插件 或 chrome浏览器配置跨域 2-4 通过iframe 如&#xff1a;aaa.com 中读取bbb.com的localStorage 1)在aaa.com的页面中&#xff0c;在页面中嵌入一个src为bbb.com的iframe&#x…

详细分析Linux内存知识并释放内存

目录 前言1. 基本知识1.1 free1.2 cat /proc/meminfo1.3 slabtop 2. 清空内存 前言 本篇文章主要分析内存 如果是磁盘空间&#xff0c;推荐阅读&#xff1a;服务器出现根目录磁盘满了解决方法 1. 基本知识 在Linux系统中&#xff0c;查看内存的基本知识包括以下几个方面&…