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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l773575310/article/details/79341599

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 格式化输入与输出

  • iostream的操纵符

  • 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 函数分别代表“放置”和“获得”,两者操作同一个标记。


猜你喜欢

转载自blog.csdn.net/l773575310/article/details/79341599
今日推荐