C++ Primer系列 第17章 标准库特殊设施

本文详细探讨了C++标准库中的一些高级特性,包括tuple的定义与使用,bitset的操作,正则表达式的匹配与应用,以及随机数的生成与分布。通过实例展示了如何利用tuple返回多个值,如何定义和初始化bitset,以及如何使用正则表达式进行文本搜索和替换。此外,还介绍了随机数引擎和分布,以及IO库的格式化输入输出和随机访问功能。
摘要由CSDN通过智能技术生成

虽然我们不能详细介绍所有标准库设施,但仍有一些标准库设施在很多应用中都是有用的:tuple,bitset,正则表达式以及随机数。我们还将介绍一些附加的IO库功能:格式控制,未格式化IO和随机访问。

17.1 tuple类型

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

  • 我们可以将tuple看作一个“快速而随意”的数据结构。

17.1.1 定义和初始化tuple

当我们定义一个tuple时,需要指出每个成员的类型:

tuple<size_t, size_t, size_t> threeD; // 三个成员都设置为0
tuple<string, vector<double>, int, list<int>>
someVal("constants", {
    3.14, 2.718 }, 42, {
    0,1,2,3,4,5 });

tuple的这个构造函数是explicit的,因此我们必须使用直接初始化语法:

tuple<size_t, size_t, size_t> threeD = {
    1,2,3 }; // 错误
tuple<size_t, size_t, size_t> threeD{
    1,2,3 }; // 正确

类似make_pair函数,标准库定义了make_tuple函数,我们还可以用它来生成tuple对象:

// 表示书店交易记录的tuple,包含:ISBN,数量和每册书的价格
auto item = make_tuple("0-999-78345-X", 3, 20.00);

类似make_pair,make_tuple函数使用初始值的类型来推断tuple的类型。在本例中,item是一个tuple,类型为tuple<const char*, int, double>

17.1.2 使用tuple返回多个值

tuple的一个常见用途是从一个函数返回多个值。例如,我们的书店可能是多家连锁书店中的一家。每家书店都有一个销售记录文件,保存每本书近期的销售数据。我们可能希望在所有书店中查询某本书的销售情况。

17.2 bitset类型

在4.8节中我们介绍了将整形运算对象当作二进制位集合处理的一些内置运算符。标准库还定义了bitset类,使得位运算的使用更为容易,并且能够处理超过最长整形类型大小的位集合。bitset类定义在头文件bitset中。

17.2.1 定义和初始化bitset

bitset类是一个类模板,它类似array,具有固定的大小。当我们定义一个bitset时,需要声明它包含多少个二进制位:
bitset<32> bitvec(1U); // 32位;底位为1,其他位为0
编号从0开始的二进制位被称为地位(low-order),编号到31结束的二进制位被称为高位(high-order)。

从一个string初始化bitset

我们可以从一个string或一个字符数组指针来初始化bitset。两种情况下,字符都直接表示位模式。与往常一样,当我们使用字符串表示数时,字符串中下标最小的字符对应高位,反之亦然:
bitset<32> bitvec4("1100"); // 2,3两位为1,剩余2位为0
如果string包含的字符数比bitset少,则bitset的高位被置为0.

  • string的下标编号习惯与bitset恰好相反:string中下标最大的字符(最右字符)用来初始化bitset中的低位(下标为0的二进制位)。当你用一个string初始化一个bitset时,要记住这个差别。

17.2.2 bitset操作

使用bitset

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值