后面三章划重点的截图会多一些,我的水平太差,现在还无法用自己的语言描述这些概念…
第十七章 标准库特殊设施
17.1 tuple类型
类似于pair的概念,将一堆变量打包装进一个tuple里面
1. 定义和初始化tuple
tuple是一个模板,需要指出所有成员的类型
2. 必须使用直接初始化
3. 访问tuple成员
使用 get() , i表示一个正整数
17.2 bitset 类型
方便的进行位运算,处理二进制数
1. 定义和初始化 bitset
bitset是一个模板类,需要给出二进制数的位数来实例化类
2. bitset操作
17.3 正则表达式
需要包括头文件regex
regex_match和regex_search都是bool函数
如果输入序列和给定正则表达式匹配,则两个函数都返回true
如果输入序列中一个子串与正则表达式匹配,则regex_search返回true
1. 使用正则表达式库
大致思路:
用一个字符串表示正则表达式,然后使用该字符串构造出regex正则表达式对象。
根据regex对象使用对应的匹配函数,查看传入的字符串是否符合正则表达式。
在使用匹配函数查看是否匹配时,使用smatch对象保存结果
regex对象的选项
可以设置正则表达式的属性,比如忽略大小写匹配等
例子:忽略大小写
多个反斜杠是为了取消特殊符号的含义
指定或使用正则表达式时的错误
正则表达式在运行时才会被编译,所以正则表达式的编译非常慢,在程序中最好少用或者不用正则表达式
正则表达式发生错误时抛出的异常
正则表达式类和输入序列类型
输入类型、正则表达式类型、存储结果的match类型必须要匹配
2. 匹配与regex迭代器类型
输入的字符串可能存在多个匹配的子串,使用迭代器可以遍历这些子串
创建迭代器的时候,指定输入字符串的开头和结尾,指定正则表达式,得到匹配子串的数组,返回该数组的迭代器。
使用sregex _iterator
使用匹配数据
此例中是为了取得匹配子串在输入字符串中前后40位的信息
smatch是在使用匹配函数时用来存储结果的变量
3. 使用子表达式
可以将一个正则表达式拆分成多个子表达式,子表达式通常在整个正则表达式中用括号括起来
匹配正则表达式子串的子表达部分可以通过存储结果的match对象进行访问。
0代表整个匹配子串,子表达从1开始计数
子表达式用于数据验证
处理具有一定格式的数据时,用正则表达式比较好。而且可以使用正则表达式的子表达对匹配子串进行拆分处理。
正则表达式的特殊表示形式
实际引用例子:处理电话号码
使用子匹配操作
下面的表格适用于存储结果的match类
使用下标访问符来获得对应的子表达式
虽然整个大的匹配成功的
但有些子匹配是可选的,比如括号。当左括号出现时右括号也必须出现,这个函数就是检查这些子匹配是否符合规范
4. 使用regex_replace
将符合正则表达式的部分进行替换
传入正则表达式,目标字符串,格式字符串。返回一个替换后的字符串
格式字符串以目标字符串中子表达式为素材,自由组合成替换后的字符串。
17.4 随机数
需要包括头文件 random。引擎负责生成随机数序列,分布负责将随机数序列限定到特定范围上
1. 随机数引擎与分布
随机数引擎是一个类,定义调用运算符。调用时返回一个随机数
分布类型与引擎
分布类型将随机数生成引擎进行包装,得到指定范围内的随机数。
调用分布类型时需要传递随机引擎对象,而不是随机引擎产生的随机数
随机生成的数值序列
随机数引擎再创建时就已经把随机数序列确定好了
设置随机数发生器种子
给随机数生成器不同的种子,使其生成不同的随机数序列
2. 其他随机数分布
生成随机实数
使用分布的默认结果类型
生成非均匀分布的随机数
返回随机的bool值
17.5 IO库再探
1. 格式化输入与输出
格式状态类似于状态机,处于不同的状态打印相同的符号,输出会不一样。
而操作符则用来改变状态
控制布尔值的格式
指定整数值的进制
在输出中打印出进制
输出补白
控制输入格式:不跳过空白符
2. 未格式化的输入/输出操作
未格式化IO允许我们将一个流当作一个无解释的字节序列来处理
单字节操作
查看下一个字符
从输入操作返回的int值
读取字符的返回值都为int