C++ 学习笔记(17)tuple类型、bitset类型、随机数(引擎和分布)、IO库(操纵符、未格式化输入输出、随机访问)

C++ 学习笔记(17)tuple类型、bitset类型、随机数(引擎和分布)、IO库(操纵符、未格式化输入输出、随机访问)

参考书籍:《C++ Primer 5th》


17.1 tuple 类型

在这里插入图片描述

17.1.1 定义和初始化tuple

  • tuple 的构造函数是explicit的。
tuple <int, float , string> t = {1, 2.0, "stf"};	// 错误。要使用显式构造
tuple <int, float , string> t{1, 2.0, "stf"};	// 正确。
auto t1 = make_tuple(123, 6.6, "bbb");		// tuple<int, double, const char *>
get<0>(t1);		// 获取第一个对象的引用(int &):123
size_t sz = tuple_size<decltype(t1)>::value;	// t1的成员数量:3
tuple_element<1, decltype(t1)>::type d = get<1>(t1);	// t1第二个成员类型:double

17.2 bitset 类型

  • 值为unsigned long long 类型。

在这里插入图片描述
在这里插入图片描述

bitset<8> bitvec1(~1);		// 除了第一位为0,其他7为1,即:1111 1110
bitset<4> bitvec2("01011111");	// 使用字符串直接初始化,因为只有4位,实际为:0101
bitvec1 |= 1UL;				// 将第一位置1
bitvec1 &= ~(1UL << 3);		// 将第四位置0

17.3 正则表达式

略。


17.4 随机数

  • 随机数引擎类:生成随机unsigned序列。
  • 随机数分布类:使用引擎返回服从特定概率分布的随机数。
  • 随机数发生器:指分布对象和引擎对象的组合。
  • 随机数引擎和分布都是函数对象类。
  • C++程序不应该使用库函数rand,而应该使用default_random_engine类和恰当的分布类对象。

17.4.1 随机数引擎和分布

  • 相同种子的引擎,产生相同的随机数。(对于局部随机发生器,可以设置为static以保证每次调用都不同)

在这里插入图片描述

default_random_engine e;		// 默认随机数引擎
for (size_t i = 0; i < 10; i++)
	cout << e() << " ";			// 随机数,范围在[0,unsiged最大值]
cout << endl;
uniform_int_distribution<unsigned> u(0, 9);	// 均匀分布,随机整数,范围在[0, 9]
for (size_t i = 0; i < 10; i++)
	cout << u(e) << " ";		// 均匀分布在[0, 9]的随机数

17.4.2 其他随机数分布

在这里插入图片描述


17.5 IO库再探

17.5.1 格式化输入与输出

在这里插入图片描述

  • cout.precision:设置精度时,浮点数会安精度舍入,即3.14159在精度为四位时,值为3.142,精度为三位时,值为3.14。

  • 定义在iomanip头文件的操纵符:

在这里插入图片描述

17.5.2 未格式化的输入输出操作

在这里插入图片描述

  • peek:返回输入流中下一个字符的副本,但不会从留在删除,返回的值还在流中。

  • unget:输入流往后移,最后读取值重新回到流中。

  • putback:同unget,但接受的参数必须与最后读取的值相同。

  • 输入操作返回值为int,因为可以用来判断是否到文件末端(宏:EOF)。

在这里插入图片描述

  • get()将分隔符留作istream中下一个字符,getline()则读取并丢弃分隔符。

17.5.3 流随机访问

  • 随机IO本质依赖于系统。
  • seek 和 tell 函数分别代表“放置”和“获得”,两者操作同一个标记。

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值