C++中string笔记杂谈

string 类库中的size_type是一种怎样的自定义类型

在 C++ 的 string 类库中,size_type 是一种无符号整数类型,用于表示字符串的大小(长度)。

它被定义为能够容纳字符串可能的最大长度的无符号整数类型。

比如说,如果一个字符串可能非常长,使用普通的 int 可能无法表示其长度,这时就会使用 size_type 来确保有足够的范围来准确表示字符串的长度。

举个例子,如果要遍历一个字符串 std::string str = "Hello World"; ,可以这样写:

for (std::string::size_type i = 0; i < str.size(); ++i) {// 对每个字符进行操作
}

 这样能保证在处理不同长度的字符串时,不会出现长度表示范围不足的问题。

这样设计的原因

string 类中使用 size_type 这样的自定义类型来表示字符串的大小主要有以下几个原因:

  1. 可移植性:不同的平台上,整数类型的大小可能会有所不同。使用自定义的 size_type 可以确保在各种平台上,string 的大小表示都能有一致的行为和足够的范围。

  2. 明确语义:使用 size_type 能更清晰地表明这个类型专门用于表示字符串的大小,增加了代码的自解释性。

  3. 避免错误:如果直接使用 int 或其他固定的整数类型,可能会在处理特别长的字符串时出现溢出等错误。而 size_type 通常被设计为能够适应字符串可能达到的最大长度。

  4. 与标准库的一致性:整个标准库在很多容器和数据结构中都采用了类似的设计,使用自定义的类型来表示特定的度量,这有助于保持代码风格的统一和可理解性。

string对象与字符串字面值

在 C++ 中,将 string 对象与字符串字面值常量相加时,需要确保字符串字面值常量被明确转换为 string 类型。

可以使用 + 运算符来实现相加,例如:

std::string str = "Hello ";
std::string result = str + "World"; 

在 C++ 中,不能直接使用 + 运算符把两个 const char 数组(也就是字符串字面值)相加。

std::string s2 = "world";
std::string s4 = "hello" + "," + s2;

其中字面值字符串“hello”和“,”是不能之间相加的,需要显示的进行类型转换string("hello")

 string对象与字符串字面值相加时产生的临时对象

如:

string s1 = "hello";
string s3 = s1 + "," + "world";

与下面的语句是等价的:

string s1 = "hello";
string tmp = s1 + ",";
string s3 = tmp + "world";

tmp就是产生的临时对象。

在执行表达式计算过程中,会创建这个临时对象来存储中间结果。通常,编译器会在需要的时候分配内存来存储这个临时对象,并且在表达式的计算完成后,如果没有其他引用指向它,它会在适当的时候被释放。

string类的输入运算符和getline()函数是如何处理空白字符的

 

在 C++ 的 string 类中,输入运算符 >> 和 getline() 函数在处理空白字符时有不同的行为。

输入运算符 >> 会自动忽略输入前面的空白字符(如空格、制表符、换行符等),并且在遇到空白字符时会停止读取,将之前读取的非空白字符部分作为一个字符串存入目标 string 对象中。

例如,如果输入是 hello world ,使用 std::cin >> str; ,那么 str 只会被赋值为 hello 。

而 getline() 函数则会读取包括空白字符在内的一整行输入,直到遇到换行符为止。

例如,如果输入是 hello world ,使用 std::getline(std::cin, str); ,那么 str 会被赋值为 hello world 。

范围for语句

范围 for 语句是 C++11 引入的一种更简洁的循环结构,用于遍历一个序列(如数组、vector 、string 等)中的每个元素。

其一般形式为:

for (declaration : expression)statement

在处理 string 的每个字符时,范围 for 语句非常有用。它可以让您无需关心索引的操作,就能直接遍历字符串中的每个字符。

std::string str = "Hello";
for (char c : str) 
{std::cout << c << " ";
}

 

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

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

相关文章

【Flink系列】4. Flink运行时架构

4. Flink运行时架构 4.1 系统架构 Flink运行时架构——Standalone会话模式为例 1&#xff09;作业管理器&#xff08;JobManager&#xff09; JobManager是一个Flink集群中任务管理和调度的核心&#xff0c;是控制应用执行的主进程。也就是说&#xff0c;每个应用都应该被…

AI刷题-饭馆菜品选择问题、构造回文字符串问题

目录 一、饭馆菜品选择问题 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终代码&#xff1a; 运行结果&#xff1a; 二、构造回文字符串问题 问题描述 测试样例 解题思路&#xff1a; 解题思路 具体步骤 最终代码&#xff1a;…

使用redis-cli命令实现redis crud操作

项目场景&#xff1a; 线上环境上redis中的key影响数据展示&#xff0c;需要删除。但环境特殊没办法通过 redis客户端工具直连。只能使用redis-cli命令来实现。 操作步骤&#xff1a; 1、确定redis安装的服务器&#xff1b; 2、找到redis的安装目录下 ##找到redis安装目…

31.Java Callable 接口与 FutureTask 类

一、Callable 接口 1、概述 目前我们学习了有两种创建线程的方法&#xff0c;一种是通过继承 Thread 类&#xff0c;另一种是 通过实现 Runnable 接口创建线程&#xff0c;但是&#xff0c;Runnable 缺少的一项功能是&#xff0c;当线程 终止时&#xff08;即 run 方法完成时…

Springboot项目Jackson支持多种接收多种时间格式

前言 在springboot项目中经常会使用Jackson框架,当前端给后端传输时间类型时,我们一般需要先配置好时间格式,否则后端无法接收。以下是一些配置方法 统一配置 spring:jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss这种配置就是要求前端统一传输的格式是yyyy-…

讲一下ZooKeeper的持久化机制?

大家好&#xff0c;我是锋哥。今天分享关于【讲一下ZooKeeper的持久化机制&#xff1f;】面试题。希望对大家有帮助&#xff1b; 讲一下ZooKeeper的持久化机制&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ZooKeeper 是一个开源的分布式协调服务&…

图数据库 | 18、高可用分布式设计(中)

上文我们聊了在设计高性能、高可用图数据库的时候&#xff0c;从单实例、单节点出发&#xff0c;一般有3种架构演进选项&#xff1a;主备高可用&#xff0c;今天我们具体讲讲分布式共识&#xff0c;以及大规模水平分布式。 主备高可用、分布式共识、大规模水平分布式&#xff…

转换fn_dblog的十六进制Current LSN格式

Select[Current LSN],[Previous LSN],Operation,Context,[Transaction Name],* From fn_dblog(null,null) where [Begin Time]>2025/01/15--转换fn_dblog的十六进制Current LSN格式Declare LSN varchar(22),LSN1 varchar(11),LSN2 varchar(10),LSN3 varchar(5),NewLSN varch…

【Python】第二弹---深入理解编程基础:从常量、变量到注释的全面解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、常量和表达式 2、变量和类型 2.1、变量是什么 2.2、变量的语法 2.3、变量的类型 2.4、动态类型特…

生产环境中常用的设计模式

生产环境中常用的设计模式 设计模式目的使用场景示例单例模式保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点- 日志记录器- 配置管理器工厂方法模式定义一个创建对象的接口&#xff0c;让子类决定实例化哪个类- 各种工厂类&#xff08;如视频游戏工厂模式创…

YOLOv10改进,YOLOv10检测头融合RFAConv卷积,添加小目标检测层(四头检测)+CA注意机制,全网首发

摘要 空间注意力已广泛应用于提升卷积神经网络(CNN)的性能,但它存在一定的局限性。作者提出了一个新的视角,认为空间注意力机制本质上解决了卷积核参数共享的问题。然而,空间注意力生成的注意力图信息对于大尺寸卷积核来说是不足够的。因此,提出了一种新型的注意力机制—…

解锁C#语法的无限可能:从基础到进阶的编程之旅

目录 一、C# 基础语法 1.1 数据类型 1.2 变量与常量 1.3 运算符 1.4 控制流语句 二、C# 面向对象编程语法 2.1 类与对象 2.2 封装 2.3 继承 2.4 多态 虚方法 抽象类 接口 三、C# 高级语法 3.1 特性&#xff08;Attribute&#xff09; 预定义特性 自定义特性 3…

Vue3中使用组合式API通过路由传值详解

在Vue 3中&#xff0c;使用组合式API来传递路由参数是一种常见的需求。Vue Router 是 Vue.js的官方路由管理工具&#xff0c;可以在不同的场景下通过多种方式传递和接收路由参数。下面将详细讲解几种常见的路由传值方式&#xff0c;并提供相应的代码示例。 目录 1. **通过路由参…

“AI智能防控识别系统:守护安全的“智慧卫士”

在如今这个科技飞速发展的时代&#xff0c;安全问题始终是大家关注的焦点。无论是企业园区、学校校园&#xff0c;还是居民社区&#xff0c;都希望能有一双“慧眼”时刻守护着&#xff0c;及时发现并防范各种安全隐患。而AI智能防控识别系统&#xff0c;就像一位不知疲倦、精准…

Leetcode 983. 最低票价 动态规划

原题链接&#xff1a;Leetcode 983. 最低票价 class Solution { public:int mincostTickets(vector<int>& days, vector<int>& costs) {int n days.size();int last days[n - 1];int dp[last 1];map<int, int> mp;for (auto x : days)mp[x] 1;dp…

Vue篇-07

Vue UI组件库 一、移动端常用的UI组件库 1.1、Vant 1.2、Cube UI 1.3、Mint UI 二、PC端常用的UI组件库 2.1、Element UI Element - The worlds most popular Vue UI framework 安装&#xff1a; 按需引入&#xff1a; 135_尚硅谷Vue技术_element-ui按需引入_哔哩哔哩_b…

2025.1.15——四、布尔注入

题目来源&#xff1a;ctfhub技能树 目录 一、基本操作&#xff1a;整理已知信息&#xff0c;得到本题为布尔注入 方法一&#xff1a;手工盲注&#xff08;不推荐&#xff09; step 1&#xff1a;判断具体形式 step 2&#xff1a;查询字段数 step 3&#xff1a;通过回显判…

基于SpringBoot的装修公司管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

小游戏前端地区获取

目前前端获取除了太平洋&#xff0c;没有其它的了。 //在JS中都是使用的UTF-8&#xff0c;然而requst请求后显示GBK却是乱码&#xff0c;对传入的GBK字符串&#xff0c;要用数据流接收&#xff0c;responseType: "arraybuffer" tt.request({url: "https://whoi…

向harbor中上传镜像(向harbor上传image)

向 Harbor 中上传镜像通常分为以下几个步骤&#xff1a; 1、登录 Harbor 2、构建镜像 3、标记镜像 4、推送镜像到 Harbor 仓库 1、登录 Harbor 首先&#xff0c;确保你已经能够访问 Harbor&#xff0c;并且已经注册了账户。如果还没有 Harbor 账户&#xff0c;你需要先注册一…