C++ Primer系列 第17章 标准库特殊设施
虽然我们不能详细介绍所有标准库设施,但仍有一些标准库设施在很多应用中都是有用的: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&g