• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2019-12-08 07:58 Aet 隐藏边栏 |   抢沙发  15 
文章评分 2 次,平均分 5.0

标准库tuple类模板

tuple是类似pair的模板。
每个pair的成员类型都不相同,但每个pair都恰好有两个成员。
不同tuple类型的成员类型也不相同,但是一个tuple可以有任意数量的成员。
每个确定的tuple类型的成员数目是固定的,但一个tuple类型的成员数目可以与另一个tuple类型不同。

tuyple<T1,T2,...,Tn> t; t是一个tuple,第i个成员的类型为Ti.所有成员都进行值初始化。
tuple<T1,T2,...,Tn> t(v1,v2,...,vn); 每个成员用对于的vi来初始化,此构造函数是显示的。
make_tuple(v1,v2,...,vn) 返回一个用给定初始值初始化的tuple,tuple的类型由初始值的类型判断
t1 == t2 当两个具有相同数量的成员且成员对应相等时,两个tuple相等。一旦发现有不相等的,剩下的成员就不会再比较了。
t1 != t2
t1 relop t2 关系运算符使用字典序
get(t) 返回t的第i个数据成员的引用;如果t是一个左值,结果是一个左值引用;否则,是一个右值引用。tuple所有成员都是public的。
tuple_size::value 一个类模板,可以通过一个tuple类型来初始化。它有一个名为value的public constexpr static数据成员,类型为size_t,表示给定tuple类型中成员的数量
tuple-element<i,tupleType>::type 一个类模板,可以通过一个整型常量和一个tuple类型来初始化。它有一个叫type的public成员,表示给定tuple类型中指定成员的类型。

bitset运算

bitset类是一个类模板
bitset操作定义了多种检测或设置一个或多个二进制位的方法。
bitset还支持位运算符。
这些位运算符用于bitset对象的含义与内置运算符用于unsigned运算对象的含义相同。

b.any() b中是否存在置位的二进制位
b.all() b中所有位都置位了吗
b.none() b中不存在置位的二进制位吗
b.count() b中置位的位数
b.size() y一个constexpr函数,返回b中的位数
b.best(pos) r若pos位置的位是置位的,则返回true,否则返回false
b.set(pos,v) 将位置pos位的位设置bool值,v默认位true,如果未传递实参,则将b中所有位置位
b.set()
b.reset(pos) 将位置pos位处的位复位或将b中所有位复位。
b.reset()
b.filp(pos) 改变pos处的位的状态或改变b中的每一位的状态
b[pos] 访问b中位置pos处的位;如果b是const的,则当该位置位时b[pos]返回一个bool值true,否则返回false
b.to_ulong() 返回无符号long
b.to_ullong() 返回无符号long long
b.to_string(zero,one) 返回一个string,表示b中的位模式,zero和one的默认值分别为0和1,用来表示b中的0和1
os << b 将b中二进制位打印为字符0或1,打印到流os
is >> b 从is读取字符存入b。当下一个字符不是0或1时,或是已经读入b.size()个位时,读取过程停止

bitset对象的一个或多个位置位(即等于1)时,操作any返回true。
C++11标准引入了all操作,当所有位置位时返回true。

正则表达式

正则表达式是一种描述字符序列的方法,是一种极其强大的计算工具。
这个地方,仅仅简单介绍C++正则表达式库(RE库)的一些内容,它是C++11标准库的一部分。
RE库定义在regex文件中

regex 表示有一个正则表达式的类
regex_match 将一个字符序列与一个正则表达式匹配
regex_search 寻找第一个与正则表达式匹配的子序列
regex_replace 使用给定格式替换一个正则表达式
sregex_iterator 迭代器适配器,调用regex_search来遍历一个string中所有匹配的子串
smatch 容器类,保存在string中搜索的结果
ssub_match string中匹配的子表达式的结果

随机数库

程序通常需要一个随机数源。在C++11标准之前,C和C++都是依赖于一个简单的C库函数rand来生成随机数。
这个rand函数生成均匀分布的伪随机数,每个随机数的范围在0和一个系统相关的最大值(至少为32767)之间。
rand函数有一些问题:即使不是大多数,也有一些程序需要不同范围内的随机数。一些应用需要随机浮点数。一些程序需要非均匀分布的数。而程序员为了解决这些问题,试图转换rand函数输出的随机数的范围、类型和分布时,存储会引入非随机性。
定义在random中的随机数库通过一组协作的类来解决这些问题:随机数引擎类,随机数分布类

引擎 类型,生成随机unsigned整数序列
分布 类型,使用引擎返回服从特定概率分布的随机数

格式控制

boolalpha 将true和false输出为字符串
*noboolalpha 将true和false输出为1,0
showbase 对整型值输出表示进制的前缀
*noshowbase 不生成表示进制的前缀
showpoint 对浮点数总是显示小数点
*noshowpoint 只有当浮点数包含小数部分时才显示小数点
showpos 对非负数显示+
*noshowpos 对非负数不显示+
uppercase 在十六进制中打印0X,在科学计数中打印E
*noupercase 在十六进制中打印0x,在科学计数中打印e
*dec 整型数显示为十进制
hex 整型数显示为十六进制
oct 整型数显示为八进制
left 在值的右侧添加填充字符
right 在值的左侧添加填充字符
internal 在符号和值之间添加填充字符
fixed 浮点数显示为定点十进制
scientific 浮点数显示为科学计数法
hexfloat 浮点数显示为十六进制(C++11标准)
defaultfloat 重置浮点数格式为十进制(C++11标准)
unitbuf 每次输出操作后都刷新缓冲区
*nounitbuf 恢复正常的缓冲区刷新方式
*skipws 输入运算符跳过空白符
noskipws 输入运算符不跳过空白符
flush 刷新ostream缓冲区
ends 插入空字符,然后刷新ostram缓冲区
endl 插入换行,然后刷新ostream缓冲区
*表示默认流状态

内联命名空间

C++11标准引入了一种新的嵌套命名空间,叫内联命名空间。
和普通的嵌套命名空间不同的是,内联命名空间中的名字可以被外层命名空间直接使用。
也就是说,我们无效在内联命名空间的名字前面添加表示该命名空间的前缀,通过外层命名空间的名字就可以直接访问它。

继承的构造函数与多重继承

在C++11标准中,允许派生类从它的一个或几个基类中继承构造函数。
但是,如果从几个基类中继承了相同的构造函数,则程序将产生错误。

关于enum

C++包含两种枚举:限定作用域的不限定作用域的。
C++11标准引入了限定作用域的枚举类型。
定义限定作用域的枚举的格式如下:

定义不限定作用域的枚举的格式如下:

另外,在C++11标准下,我们可以在枚举的名字后面加上冒号以及我们想在该enum中使用的类型。

除此之外,在C++11标准中,我们可以提前声明enum。
enum的前置声明(无论显示还是隐式)都必须指定其成员的大小。

mem_fn

我们要使用function生成一个可调用对象

使用mem_fn
mem_fn让编译器负责推断成员的类型。它可以从成员指针生成一个可调用对象;可function不同的是,mem_fn可以根据成员组织的类型推断可调用对象的类型。

类类型的union成员

早期的union不能含有定义了构造函数或拷贝控制成员的类类型成员。
C++11标准取消了这一限制。
然而对union来说,要想构造或者销毁类类型的成员必须执行非常复杂的操作,因为我们通常把含有内类型成员的union内嵌在另一个类中。这个类可以管理并控制与union的类类型成员有关的状态转换。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2023-02-07
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享