1. 定义

将一些数据组合成单一对象(类似pair)

tuple支持的操作

操作 解释
tuple<T1, T2, …, Tn> t; t是一个tuple,成员数为n,第i个成员的类型是Ti所有成员都进行值初始化。
tuple<T1, T2, …, Tn> t(v1, v2, …, vn); 每个成员用对应的初始值vi进行初始化。此构造函数是explicit的。
make_tuple(v1, v2, …, vn) 返回一个用给定初始值初始化的tuple。tuple的类型从初始值的类型推断。
t1 == t2 当两个tuple具有相同数量的成员且成员对应相等时,两个tuple相等。
t1 relop t2 tuple的关系运算使用字典序。两个tuple必须具有相同数量的成员。
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类型中指定成员的类型。

1.1 定义和初始化tuple

定义和初始化示例:

tuple<size_t, size_t, size_t> threeD;/ / 三个成员都设置为 0
tuple<size_t, size_t, size_t> threeD{1,2,3};
tuple<size_t, size_t, size_t> threeD = {1,2,3};//errortuple<string, vector<double>, int, list<int>>
someVal ( "constants", { 3.14 , 2.718 } , 42, { 0,1, 2, 3, 4, 5 } )auto item = make_tuple("0-999-78345-X", 3, 2.00);
tem 是一个 tuple, 类型为 tuple<const char *, int, double>

1.2 访问tuple的成员

要访问tuple的成员,使用一个名为get的标准库函数模板,同时传递给get一个tuple对象,其返回指定成员的引用

auto book = get<0>(item);    //返回item的第一个成员
auto book = get<1>(item);    //返回item的第二个成员
auto book = get<2>(item)/cnt;    //返回item的最后一个成员
get<2>(item) *= 0.8;    //打折20%

1.3 decltype

不知道一个 tuple 准确的类型细节信息, 可以用两个辅助类模板来查询 tuple成员的数量和类型:

typedef decltype (item) trans; / / trans 是 item的类型

1.4 tuple_size

tuple_size 有一个名为 value 的public static 数据成员, 它表示给定 tuple中成员的数量。

/ / 返回 trans 类型对象中成员的数量
size_t sz= tuple_size<trans>::value;//返回3

1.5 tuple_element

tuple_element 模板除了一个 tuple 类型外, 还接受一个索引值。 它有一个名为 type 的 public 类型成员, 表示给定 tuple 类型中指定成员的类型。

/ / cnt 的类型与 item 中第二个成员相同
tuple_element<1, trans>::type cnt = get<1> (item) ; // cnt 是一个 int

1.6 关系和相等运算符

只有两个 tuple 具有相同数量的成员时,才可以比较

tuple<string, string>  duo ( "1", "2" } ;
tuple<size_t, size_t> twoD (1, 2 ) ;
bool b (duo == twoD) ; / / 错误: 不能比较 size_t 和 string
tuple<size_t, size_t, size_t> threeD(1, 2, 3);
b = ( twoD < threeD) ; //错误: 成员数量不同
tuple<size_t, size_t> origin (0, 0);
b = (origin < twoD); //正确:b为true

C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 类型相关推荐

  1. C++ Primer 5th笔记(chap 17 标准库特殊设施)流随机访问

    1. 流类型通常都支持对流中数据的随机访问. 可以重定位流, 使之跳过一些数据, 首先读取最后一行, 然后读取第一行, 依此类推. 1.1 标准厍提供了一对函数, 来定位( seek )到流中给定的位 ...

  2. C++ Primer 5th笔记(chap 17 标准库特殊设施)多字节低层IO操作

    1. 多字节操作 一些未格式化 IO 操作一次处理大块数据,这些操作要求我们自己分配并管理用来保存和提取数据的字符数组 操作 解释 is.get(sink, size, delim) 从is中读取最多 ...

  3. C++ Primer 5th笔记(chap 17 标准库特殊设施)未格式化的输入/输出操作

    1. 格式化IO 输入和输出运算符(<< 和>>)根据读取或写入的数据类型来格式化它们. 输入运算符忽略空白符 输出应用补白 精度等规则操作 2. 未格式化 IO (unfor ...

  4. C++ Primer 5th笔记(chap 17 标准库特殊设施)IO库 之操纵符

    1. 控制浮点数格式 可以控制浮点数输出三个种格式 • 以多高精度( 多少个数字) 打印浮点值 • 数值是打印为十六进制. 定点十进制还是科学记数法形式 • 对于没有小数部分的浮点值是否打印小数点 1 ...

  5. C++ Primer 5th笔记(chap 17 标准库特殊设施)匹配标志

    1. 用来控制匹配和格式的标志 标准库还定义了用来在替换过程中控制匹配或格式的标志,这些标志可以传递给函数 regex_search 或 regex_match 或是类 smatch 的 format ...

  6. C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式类和输入序列类型

    1. 多种类型的输入 可以搜索多种类型的输入序列. RE 库为这些不同的输入序列类型都定义了对应的类型,eg. 普通 char 数据.wchar_t 数据 字符可以保存在标准库string或是 cha ...

  7. C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式错误

    1. 指定或使用正则表达式时的错误 如果我们编写的正则表达式存在错误, 则在运行时标准库会抛出一个类型为regex 的异常 eg. try {// alnum右括号少了一个, 构造函数会抛出异常reg ...

  8. C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型

    1. 提取 bitset 的值 函数返回一个值,保存了与bitset 对象相同的位模式. to_ulong() // 返回unsigned long to_ullong() //返回unsigned ...

  9. C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数

    1. 场景: rand 生成随机数 此函数生成均匀分布的伪随机整数, 每个随机数的范围在 0 和一个系统相关的最大值( 至少为 32767) 之间. 1.1 问题: 一些应用需要随机浮点数. 一些程序 ...

最新文章

  1. Qt嵌入外部EXE程序,并显示在主界面中!
  2. 查询增速200倍!看金融业数据库架构如何在蜕变中逆袭
  3. 谁说程序员只能new对象?凭本事追的女神
  4. CMA内存管理子系统
  5. Android学习笔记ListView
  6. XML——生成 XML 文档(读入 XML的反向过程)
  7. Codeblocks 开发板调试简单教程
  8. 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建
  9. Android 基础总结
  10. vue 基于网易云API的短信验证码登录(axios封装)
  11. 在网站上营销品牌故事的六种简单方法
  12. 同济大学计算机专业辅修声乐,同济大学关于本科生修读辅修专业的管理办法
  13. OCR表格识别(三)——文本检测与文本识别理论学习
  14. 上海应用技术大学计算机专业分数线,上海应用技术大学历年分数线 2021上海应用技术大学录取分数线...
  15. 海通证券否认获批试点 融资融券再度忽悠券商股
  16. cstring转int(long转CString)
  17. 利用jsdelivr+github使用免费又好用的全球节点CDN
  18. 贵阳CBD造型怪异 或扭曲或变形
  19. Android系统的应用开发与运行环境构建
  20. 22届应届生入职华为OD一个半月,治好了我的精神内耗...

热门文章

  1. Java 洛谷 P1149 火柴棒等式
  2. 数据中心能耗结构、PUE、WUE
  3. android 数组赋值字符串_c++数组使用
  4. python连接es数据库_Python Elasticsearch API操作ES集群
  5. java通过代码显示特定窗体,如何把这两段代码在一个窗体显示,类似于windows自带的扫雷一样...
  6. Python之pandas-profiling:pandas-profiling库的简介、安装、使用方法之详细攻略
  7. BigData之matplotlib:爬虫2018年福布斯中国富豪榜进行数据统计分析,大数据告诉你一些不可思议的事情
  8. BlockChain:Scene application区块链场景应用集合
  9. STM32启动过程分析
  10. Dubbo实现原理之基于SPI思想实现Dubbo内核