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

参考资料:

  • 《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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32的数字图像处理与模式识别算法优化

基于STM32的数字图像处理与模式识别算法优化是一项涉及图像处理和机器学习领域的研究任务&#xff0c;旨在实现高效的图像处理和模式识别算法在STM32微控制器上的运行。本文将介绍基于STM32的数字图像处理与模式识别算法优化的原理和实现步骤&#xff0c;并提供相应的代码示例。…

网络运维与网络安全 学习笔记2023.11.22

网络运维与网络安全 学习笔记 第二十三天 今日目标 VLAN间通信之交换机、VLAN间通信综合案例、浮动路由 VRRP原理与配置、VRRP链路跟踪、VRRP安全认证 VLAN间通信之交换机 单臂路由的缺陷 在内网的VLAN数量增多时&#xff0c;单臂链路容易成为网络瓶颈 三层交换机 具备…

Linux 进程等待

在2号手册里查wait&#xff08;&#xff09;。wait()等待任意一个子进程的状态。 wait&#xff08;&#xff09;等待成功会返回该子进程的id,返回失败会返回-1&#xff1a; 小实验 子进程的退出码 子进程执行work()&#xff0c;父进程wait子进程。 子进程跑完5秒之后就e…

AIGC前沿技术与数字创新应用合作交流和论坛发布活动圆满落幕

2023年11月17日下午&#xff0c;AIGC前沿技术与数字创新应用合作交流和论坛发布活动在北京市海淀区牡丹科技楼B座B1报告厅成功举办。 在这个以技术为驱动力的时代&#xff0c;AIGC等这些前沿技术正以惊人的速度改变着我们的生活和产业格局。利用新兴技术和数字化工具来解决问题…

《工程测量学》笔记/期末复习资料

水平角观测方法&#xff1a; ①测回法&#xff1b;②方向观测法&#xff08;全圆观测法&#xff09;。 比例尺精度&#xff1a; 图上0.1mm&#xff08;肉眼能够识别的最小距离&#xff09;所表示的实地距离称为“比例尺精度”。 ①尺寸小于比例尺精度的地物不需要测量&…

系列十、ThreadLocal的使用场景

一、ThreadLocal的使用场景 &#xff08;1&#xff09;使用日期工具类&#xff0c;当用到SimpleDateFormat时&#xff0c;使用ThreadLocal保证线程安全&#xff1b; &#xff08;2&#xff09;全局存储用户信息&#xff08;用户信息存入ThreadLocal&#xff0c;那么当前线程在任…

Kubernetes(k8s)之Pod详解

文章目录 Kubernetes之Pod详解一、Pod介绍pod结构pod定义 二、Pod配置pod基本配置镜像拉取策略启动命令环境变量端口设置资源配额 三、Pod生命周期创建和终止初始化容器钩子函数容器探测重启策略 四、Pod调度定向调度NodeNameNodeSelector 亲和性调度NodeAffinityPodAffinityPo…

2014年6月18日 Go生态洞察:Go 1.3 版本发布

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

什么是应急演练脚本?其设计原则是什么?

应急演练脚本是一种系统性、有计划的模拟性文件&#xff0c;旨在测试和评估组织在紧急情况下的应对能力。这种脚本提供了一系列步骤和场景&#xff0c;以确保团队能够高效、协调地应对各种紧急事件。以下将详细探讨应急演练脚本的定义、设计原则以及实施过程。 一、应急演练脚本…

Leetcode2216. 美化数组的最少删除数

Every day a Leetcode 题目来源&#xff1a;2216. 美化数组的最少删除数 解法1&#xff1a;模拟 使用变量 count 代表已删除的元素个数&#xff0c;由于每次删除元素&#xff0c;剩余元素都会往前移动&#xff0c;因此当前下标为 i - count。 遍历一次数组 nums&#xff0…

Sleuth

Sleuth 一 引言 随着服务的越来越多&#xff0c;对调⽤链的分析会越来越复杂。它们之间的调⽤关系也许如下图&#xff1a; 问题&#xff1a; 1&#xff1a;微服务之间的调⽤错综复杂&#xff0c;⽤户发送的请求经历那些服务&#xff0c;调⽤链不清楚&#xff0c;没有⼀ 个⾃…

【Django使用】md文档10大模块第5期:Django数据库增删改查和Django视图

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用&#xff0c;多个组件可以很方便的以"插件"形式服务于整个框架&#xff0c;Django有许多功能强大的第三方插件&#xff0c;你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展…

兼顾陪读|自由职业者赴美国加州大学尔湾分校访学

I老师出国访学除了提升自己的科研水平外&#xff0c;主要目标还是以陪伴孩子上学为主。最终我们为其落实了排名还不错的加州大学尔湾分校的职位&#xff0c;这对于已多年脱离科研工作岗位&#xff0c;学术背景非常薄弱的I老师来说相当不易。 I老师背景&#xff1a; 申请类型&a…

str转wstr的三种方法和从网站获取json数据到数据随机提取,返回拼接字符串和动态数组

库的设置 hv库 外部包含目录&#xff1a;…\include\libhv_new\hv; 库目录&#xff1a;…\include\libhv_new\lib\x86\Release; 附加依赖项&#xff1a;hv.lib; //Get请求 获取json数据&#xff0c;然后提取符合 条件的&#xff0c;time值大于自定义变量的值&#xff0c;然后取…

uview-plus u-picker的defaultIndexs修改后无效的问题

uniapp项目中使用了uview-plus组件库&#xff0c;在使用u-picker组件时&#xff0c;发现其默认的选中属性 defaultIndex是一次性的&#xff0c;修改后无法响应&#xff0c;解决办法就是在u-picker源码中修改这个属性的watch,源码位置在uni_modules/uview-plus/components/u-pi…

Uptime Kuma 企业微信群机器人告警

curl https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa \-H Content-Type: application/json \-d {"msgtype": "text","text": {"content": "hello world"}}企业微信群机器人ke…

[autojs]autojs开关按钮的简单使用

"ui"; ui.layout(<vertical><Switch id"autoService" text"无障碍服务"checked"false"textSize"15sp"/><button text"第二个按钮"/></vertical> ); ui.autoService.on("check"…

分享5款你值得拥有,十分好用的小众软件

​ 今天为大家推荐五款不常见但好用的win10软件&#xff0c;它们都有着各自的特色和优势&#xff0c;相信你会喜欢的。 1.图片处理——Darktable ​ Darktable是一款开源的摄影工作流程应用程序和原始图像开发者。它可以让你管理你的数码底片&#xff0c;通过一个可缩放的光台…

openEuler 22.03 制作openssh9.5p1rpm包

1、yum安装编译依赖的组件 yum install -y rpm-build gcc gcc-c glibc glibc-devel openssl-devel openssl pcre-devel zlib zlib-devel make wget krb5-devel pam-devel libX11-devel libXt-devel initscripts libXt-devel gtk2-devel lrzsz 虚拟机配置可参考本地yum源 2…

ESP32 碰上内存分配问题

1、背景 看图片 _calloc_r ->_malloc_r ->heap_caps_malloc_default->heap_caps_malloc->multi_heap_malloc->multi_heap_malloc_impl->get_next_block /* Return the next sequential block in the heap.*/ static inline heap_block_t *get_next_block(co…