【STL】string

news2024/9/22 17:30:14

本节博客主要是介绍了一下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.coloradmin.cn/o/1678616.html

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

相关文章

软件测试的一些概念

一.基本概念 1.什么事需求 1&#xff09;需求的定义 用户需求&#xff1a;可以简单理解为甲方提出的需求&#xff0c;如果没有甲方&#xff0c;那么就是终端用户使用产品时&#xff0c;必须完成的任务&#xff0c;该需求一般比较简略 软件需求&#xff1a;或则叫功能需求&a…

【Amplify_自己写的shadr遇到没有阴影的解决方案】

Amplify 自己写的shadr遇到没有阴影的解决方案 2020-01-21 16:04 本来我有个百试很灵的投射阴影脚本。 这次不灵光了&#xff01;地形内建材质&#xff0c;这个不支持投射的阴影~~奇了怪了。 可以采用引用的方式UsePass加入阴影部分代码&#xff0c;具体操作如下&#xff1…

视觉SLAM14精讲——三维空间刚体运动1.2

三维空间刚体运动 欧拉角 欧拉角可以说是零理解成本的表示形式&#xff0c;由于有万向锁的问题被绝大部分项目所抛弃。欧拉角的每个轴旋转都有固定好的名称&#xff0c;这些名称十分直观&#xff1a; Z轴旋转&#xff0c;相当于左右旋转&#xff0c;叫航角&#xff0c;或偏航…

photoshop(PS)有什么快速提升工作效率的功能?或者实用功能?这里告诉你5条!

1:文件太多&#xff0c;不方便马上找到需要插入元素&#xff08;元素放入PS会发现&#xff0c;位置不知道在哪里&#xff09;&#xff0c;点击需要选中或者搭配的元素&#xff0c;ctrlV就可以快速插入目标/图层元素的位置了&#xff01; 点击当前元素&#xff0c;选中&#xf…

全局异常处理实现

全局异常统一处理 ​ 全局异常处理类通常用于捕获和处理应用程序中发生的所有异常&#xff0c;从而避免在代码的多个地方重复编写异常处理逻辑。 一、全局异常处理方案 ​ 全局异常处理类有多种实现方式&#xff0c;每种方式都有其特定的应用场景和优势。以下是几种常见的全…

Vitis HLS 学习笔记--理解串流Stream(1)

目录 1. 介绍 2. 示例 2.1 代码解析 2.2 串流数据类型 2.3 综合报告 3. 总结 1. 介绍 在Vitis HLS中&#xff0c;hls::stream是一个用于在C/C中进行高级合成的关键数据结构。它类似于C标准库中的std::stream&#xff0c;但是专门设计用于硬件描述语言&#xff08;如Veri…

vue使用marked和highlight.js实现代码高亮效果

marked是对markdown进行解析的插件&#xff0c;它可以把markdown语法解析成html语法&#xff0c;从而实现页面效果&#xff0c;而highlight.js是对解析出的代码实现高亮效果 效果&#xff1a; 安装&#xff1a;避免踩我走的坑&#xff0c;安装尽量按照这个版本安装 npm install…

【Linux网络编程】IO多路转接之poll

poll 1.poll初始2.poll函数接口3.poll服务器4.poll的优点缺点 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.poll初始 poll也是一种linux…

物联网D4——OLED显示屏

OLED简介 调试方式 SCL和SDA端口 在STM32微控制器中&#xff0c;SCL代表Serial Clock&#xff08;串行时钟线&#xff09;&#xff0c;它是IC&#xff08;Inter-Integrated Circuit&#xff09;总线协议的两个信号线之一。IC总线是一种常用的双向同步串行通信接口&#xff0c;…

el-tooltip 提示框样式修改?

【element-plus el-tooltip官网地址&#xff1a; Tooltip 文字提示 | Element Plus】 <el-tooltippopper-class"Tooltip":content"content"placement"top"effect"light" ><span class"content">{{ content }}&l…

Leecode热题100---3:无重复字符的最长子串

题目&#xff1a;给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串的长度。 C&#xff1a; 指针法&#xff0c;使用at读取字符串中的值&#xff1b; #include <iostream> #include <string> #include <vector> #include <windows.…

Image Sensor固定模式噪声(FPN)的消除方法

本文介绍Image Sensor固定模式噪声&#xff08;FPN&#xff09;的消除方法。 固定模式噪声&#xff08;FPN&#xff09;英文全称&#xff1a;Fixed Pattern Noise&#xff0c;在Image Sensor调试过程中还是比较常见的&#xff0c;它的特点是噪声位置固定不变&#xff0c;不随采…

echarts树图 改文本显示的地方的样式

树图改文本显示的时候的样式 虽然有点越改越丑 其中有一些失败的尝试 forammter 无法识别html元素 所以对于tooptips有用的html元素定义获取返回在这里写的话是不生效的 rich配置项里面的backgroundColor官方说支持 html元素和canvas元素 已经图片url 没有详细试验 官网地址 h…

vue3+ts(<script setup lang=“ts“>)刷新页面后保持下拉框选中效果

效果图&#xff1a; 代码&#xff1a; <template><div class"app-layout"><div class"app-box"><div class"header"><div class"header-left"></div><div class"title">室外智…

K8s 二进制部署 上篇

一 K8S按装部署方式&#xff1a; ① Minikube Minikube是一个工具&#xff0c;可以在本地快速运行一个单节点微型K8S&#xff0c;仅用于学习、预览K8S的一些特 性使用。 部署地址&#xff1a;https://kubernetes.io/docs/setup/minikube ② Kubeadmin Kubeadmin也是一个工…

简单聊聊分布式和集群

前言 分布式和集群&#xff0c;我们都听的比较多&#xff0c;分布式系统和集群的概念对于刚进入职场的小伙伴可能不是很清楚&#xff0c;这篇文章我们就一起看看两者到底是什么&#xff0c;有什么区别。 什么是分布式系统&#xff1f; 先看下书面解释&#xff1a; 分布式系统…

【easyX】动手轻松掌握easyX 1

01 简单绘图 在这个程序中&#xff0c;我们先初始化绘图窗口。其次&#xff0c;简单绘制两条线。 #include <graphics.h>//绘图库头文件 #include <stdio.h> int main() {initgraph(640, 480);//初始化640✖480绘图屏幕line(200, 240, 440, 240);//画线(200,240)…

英语单词量测试

网址&#xff1a;https://preply.com/en/learn/english/test-your-vocab 测试结果&#xff1a; 细节&#xff1a;英语母语者有20000-35000个单词的词汇量&#xff0c;8岁孩子的词汇量在8000个左右。而不是我们教育系统里说的&#xff0c;6000个单词足够用了。足够用&#xff0…

你写HTML的时候,会注重语义化吗?

其实说到语义化&#xff0c;多年前端开发经验的老手估计也不会太在意&#xff0c;有时候工期太紧&#xff0c;有时候自己疏忽&#xff0c;也就不那么在意了&#xff0c;直接DIVCSS一把梭下去了。 目录 什么是HTML 什么是HTML语义化 HTML语义化所带来的好处 我把CSS样式引入…