《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

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

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

相关文章

你不知道的库:库的种类,作用和加载方式

你不知道的库&#xff1a;库的种类&#xff0c;作用和加载方式 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客…

Nuxt.js Next.js Nest.js

Nuxt.js和Next.js都是服务端渲染框架(SSR)&#xff0c;属于前端框架,Nest.js则是node框架,属于后端框架。 其中Nuxt.js是vue的ssr框架&#xff0c;Next.js是react的ssr框架。 都是比vue和react更上层的前端框架。 文章目录 1.SSR2.Nuxt2.1 Nuxt的下载2.2 Nuxt的集成2.3 Nuxt…

关于用css设置input输入框hover的时候的样式以及当input为disabled的时候,不要让hover样式生效

效果如果&#xff1a; 编辑状态下的时候&#xff1a; 只读状态下的时候&#xff1a; 代码如图&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…

HTML玩转超链接a标签

大家应该都知道&#xff0c;a标签主要是转跳链接&#xff0c;接下来&#xff0c;让我为大家介绍一下a标签的使用&#xff01; 主要的作用&#xff1a;从当前页面进行跳转 标签名标签语义常用属性单/双标签a超链接href&#xff1a;要跳转的具体位置 target&#xff1a;跳转时如…

Spark的通用运行流程与Spark YARN Cluster 模式的运行流程

Spark的通用运行流程 集群启动后Worker节点会向Master节点心跳汇报资源Client向Driver提交APP&#xff0c;根据不同的运行模式在不同的地方创建Driver。Driver以粗粒度的方式向Master注册应用并申请资源&#xff08;在Application执行之前&#xff0c;将所有的资源申请完毕&…

[操作系统]进程和线程

目录 1.什么是进程 1.1进程控制块抽象 1.2 CPU 分配 —— 进程调度&#xff08;Process Scheduling&#xff09; 1.3内存分配 —— 内存管理&#xff08;Memory Manage&#xff09; 1.4进程间通信(Inter Process Communication) 2.线程 2.1概念 2.2为什么要有线程 2.3线…

阿里巴巴国际站自养号测评方式提升星级的优势与要求

作为国际站的商家&#xff0c;都明白星等级这个重要指标的重要性。它像一块闪耀的招牌&#xff0c;不仅彰显了商家的运营能力&#xff0c;还体现了公司的实力。维护一个高等级的星等级&#xff0c;可以使商家的运营工作更加轻松&#xff0c;而低等级则需要花费更多的精力。提升…

TikTok Shop订单狂涨,黑五全托管品类日卖爆了

01 黑五品类日爆单 显然&#xff0c;TikTok Shop在美国的首个黑五大促收获了胜利的果实。 根据最新发布的数据&#xff0c;TikTok Shop全托管黑五六大品类日支付GMV&#xff08;总交易额&#xff09;和支付量双双实现大幅度增长。举其中几个具体数据来看&#xff0c;女装童鞋…

redis运维(十五) 集合

一 集合 ① 概念 集合的元素在redis里面的世界是member集合&#xff1a; setset集合当中不允许重复的元素&#xff0c;而且set集合当中元素是没有顺序的,不存在元素下标 ② sadd、smembers、srem ③ sismember、srandmember、spop、scard spop 命令用于移除集合中的指定 …

【Django-DRF】多年md笔记第5篇:Django-DRF的Request、Response和视图详解

本文从分析现在流行的前后端分离Web应用模式说起&#xff0c;然后介绍如何设计REST API&#xff0c;通过使用Django来实现一个REST API为例&#xff0c;明确后端开发REST API要做的最核心工作&#xff0c;然后介绍Django REST framework能帮助我们简化开发REST API的工作。 Dj…

人工智能基础部分22-几种卷积神经网络结构的介绍,并用pytorch框架搭建模型

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能基础部分22-几种卷积神经网络结构的介绍&#xff0c;本篇文章我将给大家详细介绍VGG16、VGG19、ResNet、SENet、MobileNet这几个卷积神经网络结构&#xff0c;以及pytorch搭建代码&#xff0c;利用通用数据…

【tomcat】java.lang.Exception: Socket bind failed: [730048

项目中一些旧工程运行情况处理 问题 1、启动端口占用 2、打印编码乱码 ʮһ&#xfffd;&#xfffd; 13, 2023 9:33:26 &#xfffd;&#xfffd;&#xfffd;&#xfffd; org.apache.coyote.AbstractProtocol init &#xfffd;&#xfffd;&#xfffd;&#xfffd;: Fa…