C++primer 第十六章笔记 初稿

xiaoxiao2021-02-28  22

17.1 tuple类型

基本操作

头文件:tuple

一个tuple可以有预定数量的任意多的成员,类似于一个未命名的数据结构

对一个tuple进行定义(初始化),可以显示指明所有类型,也可以调用make_tuple,通过一组给定的初始化值生成

如果想访问其中某个成员,可使用 get(tuple-item)来访问,number必须是 constexpr 整型

如果想比较两个tuple对象,必须满足成员数量相同

tuple_size是一个辅助类模板,通常用来访问某个tuple**类型**的成员的个数,一般形式如下

auto sz = tuple_size<type-name>::value;

其中,type-name可由对tuple对象进行decltype操作得到。

tuple_element是一个辅助类模板,通常用来访问一个tuple中某个成员的类型,一般形式如下 tuple_element<number, type-name>::type x = get<number>(tuple-item); equal_range模板函数接收两个迭代器,一个值(和一个谓词),返回一个pair指明范围

17.2 bitset

定义与初始化

定义一个bitset时,必须提供一个常量表达式作为模板参数,表示大小

当使用整型初始化bitset时,整型转化为ULL。如果bitset的大小超过ULL,则补零,否则截断高位

当使用string对象或字符数组初始化bitset时,最小的下标对应最高位,且为01字符串。可以使用迭代器,将子串作为初始值

string str = "0100011101"; bitset<32> bs1(str, 5, 4); //取第五位开始的四位 bitset<32> bs2(str, str.size()-4); //取最后四位

bitset的操作

包括set/reset/filp等改变值的操作,也包括any/all /count/test等检查操作,还有to_ulong等可以转化成无符号长整型操作。

IO操作

在流提取过程中,如遇到非01字符,或遇到输入尾部或错误,或达到大小上限,输入才会停止

在流插入过程中,操作对象直接为对象名

17.3 正则表达式

基本信息

头文件:regex

基本组件

组件名作用regex表示一个正则表达式regex_match匹配字符串与表达式regex_search寻找第一个匹配的子序列regex_replace用格式替换正则表达式sregex_iteratorregex_search 迭代器smath保存搜索结果

对于regex对象,一般使用正则表达式字符串进行初始化,默认使用语言ECMAScript,也可以用相关操作更改语法。

用 “\ .” 的表达方式,排除.匹配任意字符的二义性,但为了排除C++对\的二义性,通常用\ \表示需要得到一个\字符

对于迭代器,每一次递增,即调用一次regex_search

通过括号可以分割子表达式,并可以通过smath的下标进行访问,当然文本中的括号因此需要添加\ \以表示区分。

控制匹配格式的字符,定义在std的regex_constants里。

17.4 随机数

C++中随机数生成由两部分完成,引擎负责生成随机数,分部类负责生成具体的分布(包括区间),引擎通过seed()方法改变种子。

用获取的随机整数除以上界,以获得随机浮点数是一个不好的方法,因为精度的不足,很多浮点数根本不会生成。使用新标准库的uniform_real_distribution是一个好的方法。

17.5 IO

IO中有许多操作符,通常分为两类:一类是控制输出形式;另一类是控制补白和位置;

一般操作符成对出现,因为操作符一旦使用格式保持,需要在恰当的时候还原格式。

get(),put()等操作属于未格式化的IO,将流以字节序列处理,可以实现回退等操作,但get等操作的返回类型必须是int。

通过tellg(tellp)/seekg(seekp)操作,可以获取流的地址,进行定位操作。

转载请注明原文地址: https://www.6miu.com/read-850260.html

最新回复(0)