当前位置: 首页 > news >正文

C++ string类(一)

1.C语言中的字符串

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

2. 标准库中的string类

        2.1 string类 

         https://cplusplus.com/reference/string/string/?kw=string 

        1. 字符串是表示字符序列的类
        2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。
        3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。
        4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。
        5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

总结:
1. string是表示字符串的字符串类
2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。

3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator>string;
4. 不能操作多字节或者变长字符的序列。

在使用string类时,必须包含#include头文件以及using namespace std;

2.2 string类的常用接口说明(最常用的接口)

1. string类对象的常见构造

成员函数中的构造:

只需要对 √  的着重了解

演示:

npos解释:

无符号的-1 就是整形的最大值。

        当npos的值,超过源字符串的长度,就拷贝到源字符串结束。

 

也可以这样用: 

 

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

 

size 和 length 都是计算字符串的长度的。我们更喜欢用size来计算。

 

下标访问: 

范围for访问: 

迭代器访问:

        迭代器在此次的用法更像是指针。

        下标+[] 访问只适用于部分容器,底层物理有一定连续 的链式结构、树形、哈希结构等。只能用迭代器。迭代器才是容器访问的主流形态。 

 

        s1.begin() 和 s1.end() 会返回一个指针,并且他们的区间是左闭右开,end指向字符串最后一个元素的下一个位置。

 

 

一些其他用法: 

C++内置提供了swap函数,以及string 提供了reverse; 

注意:
        1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()。

        2. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小。

         rbegin()  rend() 和 begin()  end()底层原理都差不多。

        3. string类对象的容量操作

                重点 reserve 和 resize 。

        对于一个仅定义的字符串(vs2022 默认给的是15) 初始化的要给的比size大一点。

 

        编译器给的容量也比我们要给的大一些。 

 

        如果要缩容的话空字符串可以操作,但是有存储内容的字符串就不可以缩容了。

        通过一段小代码来了解其扩容规则。 

 

 

注意:

        resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。

        resize不仅改变容量,也会影响数据。reserve只影响容量不会影响数据。

相关文章:

C++ string类(一)

1.C语言中的字符串 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符 OOP(Object Oriented Programming)的思想&#xff0c;而且…...

系统时间和JVM的Date时间不一致问题解决

通过Java得到的时间与操作系统时间不一致&#xff0c;如何修改Java虚拟机时间&#xff1f; 造成这种问题的原因可能是&#xff1a;你的操作系统时区跟你JVM的时区不一致。 你的操作系统应该是中国的时区吧&#xff0c;而JVM的时区不一定是中国时区&#xff0c;你在应用服务器…...

23111701[含文档+PPT+源码等]计算机毕业设计javaweb点餐系统全套餐饮就餐订餐餐厅

文章目录 **项目功能简介:****点餐系统分为前台和后台****前台功能介绍&#xff1a;****后台功能介绍&#xff1a;** **论文截图&#xff1a;****实现&#xff1a;****代码片段&#xff1a;** 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;77687156…...

RabbitMQ 部署及配置详解(集群部署)

单机部署请移步&#xff1a; RabbitMQ 部署及配置详解 (单机) RabbitMQ 集群是一个或 多个节点&#xff0c;每个节点共享用户、虚拟主机、 队列、交换、绑定、运行时参数和其他分布式状态。 一、RabbitMQ 集群可以通过多种方式形成&#xff1a; 通过在配置文件中列出群集节点以…...

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蝠鲼觅食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…...

「分享学习」SpringCloudAlibaba高并发仿斗鱼直播平台实战完结

[分享学习]SpringCloudAlibaba高并发仿斗鱼直播平台实战完结 第一段&#xff1a;简介 Spring Cloud Alibaba是基于Spring Cloud和阿里巴巴开源技术的微效劳框架&#xff0c;普遍应用于大范围高并发的互联网应用系统。本文将引见如何运用Spring Cloud Alibaba构建一个高并发的仿…...

Vue|props配置

props是Vue中用于传递数据的属性。通过在子组件的选项中定义props属性&#xff0c;可以指定子组件可以接收的数据以及其他配置选项。父组件可以通过在子组件上使用特定的属性来传递数据。 目录 目录 App.vue 什么是App.vue 组件引用 props配置 组件复用 案例1&#xff1a…...

使用Microsoft Dynamics AX 2012 - 2. 入门:导航和常规选项

Microsoft Dynamics AX的核心原则之一是为习惯于Microsoft软件的用户提供熟悉的外观和感觉。然而&#xff0c;业务软件必须适应业务流程&#xff0c;这可能相当复杂。 用户界面和常见任务 在我们开始进行业务流程和案例研究之前&#xff0c;我们想了解一下本章中的常见功能。…...

【代码随想录】算法训练计划21、22

day 21 1、530. 二叉搜索树的最小绝对差 题目&#xff1a; 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 思路&#xff1a; 利用了二叉搜索树的中序遍历特性用了双指…...

java实现钉钉机器人消息推送

项目开发中需要用到钉钉机器人发送任务状态&#xff0c;本来想单独做一个功能就好&#xff0c;但是想着公司用到钉钉机器人发送项目挺多的。所以把这个钉钉机器人抽离成一个组件发布到企业maven仓库&#xff0c;这样可以给其他同事用提高工作效率。 1.目录结构 2.用抽象类&…...

C语言之break continue详解

C语言之break continue 文章目录 C语言之break continue1. break 和 continue2. while语句中的break和continue2.1break和continue举例 3. for语句中的break和continue3.1break和continue举例 1. break 和 continue 循环中break和continue 在循环语句中&#xff0c;如果我达到…...

mysql group by 执行原理及千万级别count 查询优化

大家好&#xff0c;我是蓝胖子,前段时间mysql经常碰到慢查询报警&#xff0c;我们线上的慢sql阈值是1s&#xff0c;出现报警的表数据有 7000多万&#xff0c;经常出现报警的是一个group by的count查询&#xff0c;于是便开始着手优化这块&#xff0c;遂有此篇&#xff0c;记录下…...

Linux的几个常用基本指令

目录 1. ls 指令2.pwd命令3.cd 指令4. touch指令5.mkdir指令6.rmdir指令 && rm 指令7.man指令8.cp指令9.mv指令10.cat指令 1. ls 指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&…...

mac中安装Homebrew

1、Homebrew是什么&#xff1f; 软件安装管理工具 2、先检查电脑中是否已经安装了Homebrew 打开终端输入&#xff1a;brew 提示命令没有找到&#xff0c;说明电脑没有安装Homebrew 如果提示上述图片说明Homebrew已经安装成功 3、安装Homebrew 进入https://brew.sh/ 复制的命…...

Vue23的计算属性(computed)

Vue2&3的计算属性&#xff08;computed&#xff09; Vue2的计算属性 原理&#xff1a;data中的属性通过计算得到新的属性&#xff0c;称为计算属性&#xff08;computed&#xff09;。computed 具有 getter 和 setter 属性 getter 属性在使用时分别有两次调用&#xff1a…...

vue3中祖孙组件之间的通信provide和inject

一、在vue3中新增的祖孙之间通信的方式 provide和inject是Vue中的两个相关功能&#xff0c;它们一起提供了一种祖孙组件之间共享数据的方式。父组件可以使用provide来提供数据&#xff0c;而子孙组件可以使用inject来接收这些数据。 二、使用 父组件中部分代码 <script&g…...

月影下的时光机:Python中的日期、时间、农历、节气和时区探秘

前言 在现代软件开发中&#xff0c;对日期、时间和时区的准确处理至关重要。无论是全球化应用的开发&#xff0c;还是与时序数据相关的任务&#xff0c;都需要强大而灵活的工具。Python作为一门流行的编程语言&#xff0c;提供了丰富的标准库和第三方库&#xff0c;使得处理日…...

【Bazel】Bazel 学习笔记

本文简单记录下 Bazel 使用过程中的一些知识点。 目录 文章目录 目录Bazel 目录结构BUILD 构建规则常用构建规则 Bazel 命令bazel buildbazel query Mac 安装 Bazel Bazel 是谷歌推出的一个开源的构建工具&#xff0c;工作原理与 make、maven 或 gradle 等其他构建工具类似。但…...

2023年“华为杯”第二十届中国研究生数学建模成绩数据分析(末尾有吃席群)

目录 0引言1、数据大盘1.1 官方数据1.2 分赛题统计数据1.2.1 A-F 获奖数1.2.2 A-F 获奖率 2、分学校统计获奖情况&#xff08;数模之星没有统计&#xff09;3、 数模之星4、吃席群5、写在最后的话 0引言 2023年华为杯成绩于2023年9月22-26日顺利举行&#xff0c;来自国际和全国…...

Linux文件和文件夹命令详解

1.Linux文件类型详解 常见的Linux文件类型&#xff1a; 普通文件&#xff08;Regular File&#xff09;&#xff1a;&#xff08;例如文本文件、二进制文件、图片、视频和压缩文件等&#xff1b;&#xff09; 普通文件是最常见的文件类型&#xff0c;存储了实际的数据&#xf…...

MIKE水动力笔记20_由dfs2网格文件提取dfs1断面序列文件

本文目录 前言Step 1 MIKE Zero工具箱Step 2 提取dfs1 前言 在MIKE中&#xff0c;dfs2是一个一个小格格的网格面的时间序列文件&#xff0c;dfs1是一条由多个点组成的线的时间序列文件。 如下两图&#xff1a; 本博文内容主要讲如何从dfs2网格文件中提取dfs1断面序列文件。 …...

微服务nacos实战入门

注册中心 在微服务架构中&#xff0c;注册中心是最核心的基础服务之一 主要涉及到三大角色&#xff1a; 服务提供者 ---生产者 服务消费者 服务发现与注册 它们之间的关系大致如下&#xff1a; 1.各个微服务在启动时&#xff0c;将自己的网络地址等信息注册到注册中心&#x…...

PyCharm 远程连接服务器并使用服务器的 Jupyter 环境

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…...

HBase中的数据表是如何用CHAT进行分区的?

问CHA&#xff1a;HBase中的数据表是如何进行分区的&#xff1f; CHAT回复&#xff1a; 在HBase中&#xff0c;数据表是水平分区的。每一个分区被称为一个region。当一个region达到给定的大小限制时&#xff0c;它会被分裂成两个新的region。 因此&#xff0c;随着数据量的增…...

rabbitMQ的direct模式的生产者与消费者使用案例

消费者C1的RoutingKey 规则按照info warn 两种RoutingKey匹配 绑定队列console package com.esint.rabbitmq.work03;import com.esint.rabbitmq.RabbitMQUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.DeliverCallback;/*** 消费者01的消息接受*/ p…...

分布式应用服务拆分

需求落地分布式应用服务 将需求转化为分布式应用服务的过程可以按照以下步骤进行&#xff1a; 理解需求&#xff1a;首先&#xff0c;你需要仔细阅读和理解业务需求。与相关的利益相关者&#xff08;如业务分析师、产品经理等&#xff09;进行沟通&#xff0c;确保你对需求的理…...

matplotlib 绘制双纵坐标轴图像

效果图&#xff1a; 代码&#xff1a; 由于使用了两组y axis&#xff0c;如果直接使用ax.legend绘制图例&#xff0c;会得到两个图例。而下面的代码将两个图例合并显示。 import matplotlib.pyplot as plt import numpy as npdata np.random.randint(low0,high5,size(3,4)) …...

74基于matlab的PSO-ELM的多输入,单输出结果预测,输出训练集和测试机预测结果及误差。

基于matlab的PSO-ELM的多输入&#xff0c;单输出结果预测&#xff0c;输出训练集和测试机预测结果及误差&#xff0c;适应度值。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 74matlabPSO-ELM多输入单输出 (xiaohongshu.com)...

shell之head命令

head命令 head命令是UNIX和Linux环境中常用的命令&#xff0c;用于在标准输出上显示文件的开头内容。 具体来说&#xff0c;head命令默认会显示给定文件开头的10行内容。如果指定了多个文件名&#xff0c;head命令会逐个显示每个文件的开头内容&#xff0c;并在每个文件显示的…...

网络安全之了解安全托管服务(MSS)

数字化已深入千行百业。数字化将给各行各业带来巨大的变化&#xff0c;现实世界和虚拟世界也将联系得更加紧密。随着云计算、大数据等新技术结合企业级业务的落地&#xff0c;数字时代的安全面临着前所未有的新挑战。近年来&#xff0c;网络安全问题日益严重&#xff0c;在企业…...