《C++ Primer》第9章 顺序容器(三)

news2025/1/19 20:36:42

参考资料:

  • 《C++ Primer》第5版
  • 《C++ Primer 习题集》第5版

9.5 额外的string操作(P320)

9.5.1 构造string的其他方法

ecd957654e8ad1e99cadb2aeca43326
const char *cp = "hello, world!";
char arr[] = { 'h','\0','i','\0' };
string s1(cp);    // s1 == "hello, world!"
string s2(arr, 2);    // s2 == "h", size为2
string s3(arr);    // s3 == "h", size为1
string s4(cp + 7);    // s4 == "world!"
string s5(s1, 7);    // s5 == "world!"
string s6(s1, 7, 3);    // s6 == "wor"
string s7(s1, 16);    // 抛出out_of_range异常
string s8(arr, 10);    // s8 == "hi烫烫烫"

const char* 创建 string 时,指向的数组必须以空字符结尾,拷贝操作遇到空字符停止。如果我们还提供了一个计数值,数组就不必以空字符结尾。如果我们未传递计数值且数组不以空字符结尾,或计数值大于数组大小,则构造函数的行为是未定义的。

string 创建 string 时,我们可以提供一个可选的开始位置和一个计数值,开始位置必须小于等于给定 string 的大小。不管我们要求拷贝多少个字符,标准库最多拷贝到 string 结尾。

substr操作

120ee06d0c3beeea8f8fd39d6a3c140

如果开始位置超过 string 的大小,函数会抛出 out_of_range 异常。substr 最多拷贝到字符串末尾。

9.5.2 改变string的其他方法

7230046d5b3138b74de1b6ff13a8725 71cdf686d26515ab6553a5a4adb7f26

9.5.3 string搜索操作(P325)

d702d4fe934803795a03f6741350969 64ba3299b74fe033a6d3b6e2646bab8

每个搜索操作都有 4 个重载版本,都返回一个 string::size_type 值,表示匹配发生位置的下标;如果搜索失败,则返回一个名为 string::nposstatic 成员,其类型为 const string::size_type ,初始化为值 -1 ,由于 npos 是无符号类型,所以 -1 意味着 string 最大的可能大小

string 搜索函数返回的是无符号类型,所以最好不要有 int 等类型保存

string s("hello, world!1234");
auto pos1 = s.find("wor");    // pos1 == 7
string number("0123456789");
auto pos2 = s.find_first_of(number);    // pos2 == 13
auto pos3 = s.find_first_not_of(number);    // pos3 == 0
auto pos4 = s.find_last_not_of(number);    // pos4 == 12

指定从哪里开始搜索

string number("0123456789");
string s("0t1w15h218d");
string::size_type pos = 0;
// 输出所有数字的下标
while ((pos = s.find_first_of(number, pos)) != string::npos) {
	cout << pos << ' ';
	++pos;    // 移动到下一个字符
}

逆向搜索

9.5.4 compare函数(P327)

9.5.5 数值转换(P327)

d316875aa4b5333234b506dcc041558

如果 string 不能转换成一个数值,则函数抛出 invalid_argument 异常;如果得到的数值无法用任何类型表示,则抛出 out_of_range 异常。

string s("pi = 3.14, hello");
string number("0123456789");
size_t pos = 0;
auto d = stod(s.substr(s.find_first_of(number)), &pos);

9.6 容器适配器(P329)

标准库定义了三个顺序容器适配器(adaptor)stackqueuepriority_queue

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

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

相关文章

什么是索引下推

索引下推介绍 索引下推&#xff08;INDEX CONDITION PUSHDOWN&#xff0c;简称 ICP&#xff09;是在 MySQL 5.6 针对扫描二级索引的一项优化改进。总的来说是通过把索引过滤条件下推到存储引擎&#xff0c;来减少 MySQL 存储引擎访问基表的次数以及 MySQL 服务层访问存储引擎的…

CSS伪类选择器详细讲解

前言 伪类选择器在CSS中起到的作用可以说是至关重要的&#xff0c;如果CSS没有伪类选择器&#xff0c;有很多效果都要借助js来完成&#xff0c;这样不仅代码量增加&#xff0c;维护起来你难度也大。这样程序员的工作量大&#xff0c;也违背了CSS诞生的作用&#xff0c;就是提高…

在Spring Boot中使用ECharts绘制数据图表

使用ECharts来完成一些花里胡哨的图表吧&#xff0c;一般这种需求我们在我们的客户端不太常见&#xff0c;但是&#xff0c;我们在后端进行各种数据统计的时候就会发现ECharts的优点了&#xff0c;比如我们常常做的柱状图&#xff0c;折线图&#xff0c;雷达图等可视化形式&…

阿里云发送短信

官方代码如下&#xff1a; // This file is auto-generated, dont edit it. Thanks. package com.aliyun.sample;import com.aliyun.tea.*;public class Sample {/*** 使用AK&SK初始化账号Client* param accessKeyId* param accessKeySecret* return Client* throws Excep…

windows系统安装ubuntu22.04虚拟机

镜像文件准备 镜像文件 官网 企业开源和Linux | Ubuntu 镜像下载地址 https://cn.ubuntu.com/download/server/step1 选择合适的版本下载 虚拟机安装 文件-- 新建虚拟机 选择镜像 修改安装路径 修改大小&#xff0c;最好60g&#xff0c;大一点 设置用户信息 设置虚拟机网络…

【NLP】培训LLM的不同方式

在大型语言模型&#xff08;LLM&#xff09;领域&#xff0c;存在多种具有不同手段、要求和目标的培训机制。由于它们有不同的用途&#xff0c;因此重要的是不要将它们相互混淆并了解它们适用的不同场景。 在本文中&#xff0c;我想概述一些最重要的训练机制&#xff0c;包括预…

技术or管理?浅谈测试人员的未来职业发展

我们在工作了一段时间之后&#xff0c;势必会感觉到自己已经积累了一些工作经验了&#xff0c;会开始考虑下一阶段的职业生涯会如何发展。测试人员在职业生涯中的不确定因素还是不少的&#xff0c;由于其入门门槛不高&#xff0c;不用学习太多技术性知识即可入行&#xff0c;所…

RH850 G3KH异常处理简述

目录 1.概述 2.异常处理后现场恢复 3.异常处理地址识别 4.小结 1.概述 我们首先来看&#xff0c;G3KH的关键寄存器&#xff0c;PSW PSW--Program status word PSW寄存器里有表征程序状态的flag&#xff0c;CPU操作状态的flag。如下 UM---是否是user mode&#xff1b;0--…

Java Spring

文章目录 SpringSpring 是什么&#xff1f;从Spring中获取Beanxml获取注解存储类注解⽅法注解bean命名规则类注解之间的关系 注解获取bean属性注⼊缺点 构造⽅法注⼊Setter 注⼊三种注⼊优缺点分析Resource&#xff1a;另⼀种注⼊关键字同⼀类型多个 Bean 报错处理 获取bean对象…

谈一谈什么是接口测试?怎样做接口测试?

扫盲内容&#xff1a; 1.什么是接口&#xff1f; 2.接口都有哪些类型&#xff1f; 3.接口的本质是什么&#xff1f; 4.什么是接口测试&#xff1f; 5.问什么要做接口测试&#xff1f; 6.怎样做接口测试&#xff1f; 7.接口测测试点是什么&#xff1f; 8.接口测试都要掌…

​极氪,中国传统汽车品牌电动化的样板间

这篇文章早就想写了&#xff0c;因为太忙的原因就一直跳票&#xff0c;正好最近两件事的出现&#xff0c;又触发了想写这篇文章的冲动。 两件事主要是&#xff1a; 一&#xff0c;10 月份各家陆续公布了单月销量以及累计销量&#xff1b; 二&#xff0c;极氪在北京正式发布了 …

CTF靶场搭建及Web赛题制作与终端docker环境部署

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 写在前面 ╔═══════════════════════════════════════════════════…

OSG文字-渐变文字(4)

渐变文字(osgText::FadeText类)继承自osgText::Text类继承关系图如图9-6所示 图9-6 osgText::FadeText的继承关系图 从继承关系图中可以看出&#xff0c;它继承自osgText::Text类&#xff0c;因此&#xff0c;它具备一般文字属性的设置方法这里不再重复说明。创建渐变文字与一般…

Python通过selenium调用IE11浏览器报错解决方法

前提 正常安装Python 工具&#xff0c;selenium 包可以正常导入。IE浏览器驱动 IEDriverServer.exe 已经正确放置到已经添加path目录的文件下。 报错现象&#xff1a; 解决方法 打开浏览器进入 internet 选项 切换到安全页签 &#xff0c;去除“应用保护模式” 再次调用验证…

进程API

linux下进程的api forkwaitexec fork #include <stdio.h> #include <stdlib.h> #include <unistd.h>/* linux环境运行 子进程并不是完全拷贝了父进程。具体来说&#xff0c;虽然它拥有自己的 地址空间&#xff08;即拥有自己的私有内存&#xff09;、寄存器…

2018-2022年富时罗素 ESG评分数据

2018-2022年富时罗素 ESG评分数据 1、时间&#xff1a;2018-2022年 2、指标&#xff1a;证券代码、证券简称、富时罗素ESG评分、 3、说明&#xff1a; 富时罗素ESG评级体系评估了中国大陆、香港、欧洲以及美国等市场上1800家中国上市企业股票&#xff0c;评估了7200多种证券…

LangChain库简介

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

【10套模拟】【8、9】

关键字&#xff1a; 建立有序单链表、多维数组是特殊线性结构、直接选择排序、哈夫曼树高度及wpl、中序最后叶子先序最后也是、堆是完全二叉树、分块查找 统计二叉树结点数、统计二叉树值和、奇偶数划分、判断链表是否递增

docker报错standard init linux.go:228 exec user process caused: exec format error

1、报错 使用Dockerfile自己做的服务镜像&#xff0c;docker run时启动失败&#xff0c;报错如下&#xff1a; standard init linux.go:228 exec user process caused: exec format error2、原因一 当前服务器的CPU架构和构建镜像时的CPU架构不兼容。比如做镜像是在arm机器下…

2020年计网408

第33题 下图描述的协议要素是&#xff08; &#xff09;。I. 语法 II. 语义 III. 时序 A. 仅 I B. 仅 II C. 仅 III D. I、II 和 III 本题考察网络协议三要素的相关知识。 网络协议的三要素分别是语法、语义、同步&#xff08;时序&#xff09;。语法&#xff1a;定义收发双…