【STL】string

本节博客主要是介绍了一下CPP标准库中的string这一容器的相关用法和常用接口,有需要借鉴即可。

目录

  • 1.string介绍
    • 1.1CPP标准库与STL关系
    • 1.2string历史问题与介绍
  • 2.string概要
  • 3.Member functions
    • 3.1constructor
    • 3.2operator=
  • 4.访问
    • 4.1[]访问
    • 4.2迭代器访问
    • 4.3范围for访问
    • 4.4at与[]重载
  • 5.capacity
    • 5.1size与length
    • 5.2max_size
    • 5.3resize
    • 5.4capacity
    • 5.5reserve 保留
    • 5.6clear
    • 5.7empty
    • 5.8shrink_to_fit

1.string介绍

1.1CPP标准库与STL关系

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

CPP标准库是什么?
CPP标准库指的是现有的可直接使用的流、函数、接口…

CPP标准库与STL是包含关系,STL属于CPP标准库的一部分,也可说STL是CPP标准库的核心数据结构与算法的总集。两者关系如下图所示:
在这里插入图片描述

1.2string历史问题与介绍

按照道理来讲,string应该属于STL中,但是因为历史遗留问题和编写年代的问题,string最终被归属于其他函数库中,标准中规定string并不属于STL。

参见:CPP标准库网站(非官网):LINK
在这里插入图片描述
但是实际上,string也是属于一种重要的数据结构,也应该归属到STL中去。

同时,string由于是被程序员最早实现的一批函数库,因而设计上谈不上完美,有些冗余(多达一百多个接口),因而在下面我只介绍string常用的几个接口。

2.string概要

从上面推荐的网站中,我们可以查到string的相关信息:
在这里插入图片描述

这个string底层是由类模板做的,也是typedef出来的。

思考:为什么用typedef和类模板?直接一个string类不好吗?
答:在单纯英文字母而言,string中只需要放char类型的字符,因而是可以的。但是由于各个国家语言文字随着计算机全球化的发展都需要映射到计算机中去,单纯的ascll编码已经不能满足人们需要,单纯的char类型也不能存储文字系统稍复杂的国家(比如中国),因而需要w_char来存入中国的文字,因而这里用了类模板。

3.Member functions

在这里插入图片描述

3.1constructor

在这里插入图片描述

这个地方常用的一个无参构造,一个字符串构造,还一个拷贝构造,其他了解即可。
在这里插入图片描述

析构函数这里就不说了。

3.2operator=

这里这三个都挺常用的,了解一下即可。在这里插入图片描述
在这里插入图片描述

4.访问

string的访问有三种方式,一是[]下标访问,二是迭代器访问,三是范围for

4.1[]访问

在这里插入图片描述
注:size()取得大小不包括/0;
在这里插入图片描述

4.2迭代器访问

在这里插入图片描述
在这里插入图片描述

另外,迭代器分为

  • 正向、反向;
  • const、非const。

    注:迭代器是一个用法上像指针的访问器,但不一定是指针。

4.3范围for访问

在这里插入图片描述

4.4at与[]重载

在这里插入图片描述

两者是一致的,但两者的区别在于at报错是抛异常,[]报错是断言错误。

5.capacity

在这里插入图片描述

5.1size与length

两者没有任何区别,size与STL库中其他的数据结构更加一致一些。

5.2max_size

返回最大的size

5.3resize

调整size大小,默认用\0进行填充
在这里插入图片描述
这里size有两种不同的情况:
①size < capacity 不会缩容,直接在对应位置+\0
②size > capacity 扩容,默认用\0进行填充

5.4capacity

返回string的空间大小

探寻vs下string的扩容机制:注,不同平台不同,这里仅指vs2022下的情况

void test3()
{string s;size_t size = s.capacity();cout << s.capacity() << endl;for (size_t i = 0; i < 200; i++){s.push_back((char)i);if (size != s.capacity()){size = s.capacity();cout << "change:" << size << endl;}}cout << endl;
}

在这里插入图片描述

5.5reserve 保留

先来区分俩单词:
reserve 保留
reverse 反转,颠倒

这个函数是用来扩容的,扩大空间。一般用来提高效率。

5.6clear

用来处理数据的

5.7empty

判空

5.8shrink_to_fit

缩容

详情:LINK


EOF

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

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

相关文章

istio资源字段参考文档

virtual service&#xff1a; Istio / Virtual ServiceConfiguration affecting label/content routing, sni routing, etc.https://istio.io/latest/docs/reference/config/networking/virtual-service/

5---Linux小程序“进度条”及缓冲区的概念(逻辑梳理,轻松理解)

一、缓冲区的解析&#xff1a; 1.1论点的引入&#xff1a; 在Linux中有一个接口sleep&#xff0c;可以使得C/C程序休眠一段指定的时间。他需要依赖的头文件是<unistd.h>&#xff0c;注意这个接口为Linux私有。 usleep接口类似sleep接口&#xff0c;但是单位为微秒。下面…

MES系统追溯管理功能,迅速定位问题源头

一、MES系统概述 MES系统是一种实现车间生产智能化、信息化的管理系统&#xff0c;通过对生产现场的数据进行实时采集、处理和分析&#xff0c;为企业管理者提供准确、及时的生产信息。MES系统主要包括生产订单管理、物料追溯、质量管理、设备管理、物料管理、人员管理等功能模…

YOLOV8环境部署(GPU版本)

一、安装&#xff43;&#xff55;&#xff44;&#xff41;和&#xff43;&#xff55;&#xff44;&#xff4e;&#xff4e; 1、安装cuda之前先打开英伟达控制面板查看自己的显卡信息 2、“帮助”—>“系统信息”—>“组件”&#xff0c;然后看第三行的信息“Nvidia …

代码行数统计工具cloc

Release v2.00 AlDanial/cloc GitHub 代码量代码行数统计工具cloc的正确使用(windows平台亲测有效&#xff0c;本人踩过坑&#xff0c;文中提到&#xff01;)_cloc代码统计工具-CSDN博客

vue使用天地图显示不全问题解决

在vue项目中&#xff0c;使用天地图出现了地图只显示左上角的情况。如图所示&#xff1a; 解决办法&#xff1a;刷新一下容器 map.checkResize() 方法用于在地图容器大小发生变化时调整地图的大小以适应新的容器大小。 api地址&#xff1a;天地图API 解决思路&#xff1a;当整…

【永洪BI】管理系统

管理系统模块包括系统设置、认证授权、日志管理、监控预警、资源部署、VooltDB管理、数据库管理、企业应用配置、系统检查、应用管理模块。 系统设置界面&#xff1a; 可以进行清除系统缓存、配置系统主题、配置系统邮箱、配置门户主页、配置权限管理系统、配置密码策略、配置…

智能网红主播直播手机:助您轻松卖货、卖团购卷、拓客利器!

在当下快速发展的电商行业中&#xff0c;直播销售已经成为无可忽视的一大趋势。智能网红主播直播手机的出现&#xff0c;让人们无需拥有专业设备和经验&#xff0c;便可轻松参与直播销售&#xff0c;享受销售乐趣。本文将介绍智能网红主播直播手机的操作简单、易上手以及其在卖…

【全开源】国际版JAVA同城跑腿源码快递代取帮买帮送同城服务源码支持Android+IOS+H5

打造全球领先的即时配送解决方案 在数字化和智能化的浪潮中&#xff0c;即时配送服务已成为人们生活中不可或缺的一部分。随着全球化进程的加速&#xff0c;同城跑腿服务的需求也在全球范围内不断增长。为了满足这一市场需求&#xff0c;我们荣幸地推出了“国际版同城跑腿源码…

OpenHarmony标准设备应用开发实战(一)——HelloWorld

本文主要内容包括三个方面&#xff1a; 1. 应用编译环境准备&#xff1b; 2. Hello Openharmony 页面编写&#xff1b; 3. 安装应用到标准设备上面。下面就让我们从零开始学习 OpenHarmony 标准设备应用开发。 一、应用开发环境准备 1.1 下载 DevEco Studio 3.0 Beta2 版本 …

深度学习之卷积神经网络理论基础

深度学习之卷积神经网络理论基础 卷积层的操作&#xff08;Convolutional layer&#xff09; 在提出卷积层的概念之前首先引入图像识别的特点 图像识别的特点 特征具有局部性&#xff1a;老虎重要特征“王字”仅出现在头部区域特征可能出现在任何位置下采样图像&#xff0c…