C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 类型
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 类型相关推荐
- C++ Primer 5th笔记(chap 17 标准库特殊设施)流随机访问
1. 流类型通常都支持对流中数据的随机访问. 可以重定位流, 使之跳过一些数据, 首先读取最后一行, 然后读取第一行, 依此类推. 1.1 标准厍提供了一对函数, 来定位( seek )到流中给定的位 ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)多字节低层IO操作
1. 多字节操作 一些未格式化 IO 操作一次处理大块数据,这些操作要求我们自己分配并管理用来保存和提取数据的字符数组 操作 解释 is.get(sink, size, delim) 从is中读取最多 ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)未格式化的输入/输出操作
1. 格式化IO 输入和输出运算符(<< 和>>)根据读取或写入的数据类型来格式化它们. 输入运算符忽略空白符 输出应用补白 精度等规则操作 2. 未格式化 IO (unfor ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)IO库 之操纵符
1. 控制浮点数格式 可以控制浮点数输出三个种格式 • 以多高精度( 多少个数字) 打印浮点值 • 数值是打印为十六进制. 定点十进制还是科学记数法形式 • 对于没有小数部分的浮点值是否打印小数点 1 ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)匹配标志
1. 用来控制匹配和格式的标志 标准库还定义了用来在替换过程中控制匹配或格式的标志,这些标志可以传递给函数 regex_search 或 regex_match 或是类 smatch 的 format ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式类和输入序列类型
1. 多种类型的输入 可以搜索多种类型的输入序列. RE 库为这些不同的输入序列类型都定义了对应的类型,eg. 普通 char 数据.wchar_t 数据 字符可以保存在标准库string或是 cha ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式错误
1. 指定或使用正则表达式时的错误 如果我们编写的正则表达式存在错误, 则在运行时标准库会抛出一个类型为regex 的异常 eg. try {// alnum右括号少了一个, 构造函数会抛出异常reg ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型
1. 提取 bitset 的值 函数返回一个值,保存了与bitset 对象相同的位模式. to_ulong() // 返回unsigned long to_ullong() //返回unsigned ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数
1. 场景: rand 生成随机数 此函数生成均匀分布的伪随机整数, 每个随机数的范围在 0 和一个系统相关的最大值( 至少为 32767) 之间. 1.1 问题: 一些应用需要随机浮点数. 一些程序 ...
最新文章
- Qt嵌入外部EXE程序,并显示在主界面中!
- 查询增速200倍!看金融业数据库架构如何在蜕变中逆袭
- 谁说程序员只能new对象?凭本事追的女神
- CMA内存管理子系统
- Android学习笔记ListView
- XML——生成 XML 文档(读入 XML的反向过程)
- Codeblocks 开发板调试简单教程
- 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建
- Android 基础总结
- vue 基于网易云API的短信验证码登录(axios封装)
- 在网站上营销品牌故事的六种简单方法
- 同济大学计算机专业辅修声乐,同济大学关于本科生修读辅修专业的管理办法
- OCR表格识别(三)——文本检测与文本识别理论学习
- 上海应用技术大学计算机专业分数线,上海应用技术大学历年分数线 2021上海应用技术大学录取分数线...
- 海通证券否认获批试点 融资融券再度忽悠券商股
- cstring转int(long转CString)
- 利用jsdelivr+github使用免费又好用的全球节点CDN
- 贵阳CBD造型怪异 或扭曲或变形
- Android系统的应用开发与运行环境构建
- 22届应届生入职华为OD一个半月,治好了我的精神内耗...
热门文章
- Java 洛谷 P1149 火柴棒等式
- 数据中心能耗结构、PUE、WUE
- android 数组赋值字符串_c++数组使用
- python连接es数据库_Python Elasticsearch API操作ES集群
- java通过代码显示特定窗体,如何把这两段代码在一个窗体显示,类似于windows自带的扫雷一样...
- Python之pandas-profiling:pandas-profiling库的简介、安装、使用方法之详细攻略
- BigData之matplotlib:爬虫2018年福布斯中国富豪榜进行数据统计分析,大数据告诉你一些不可思议的事情
- BlockChain:Scene application区块链场景应用集合
- STM32启动过程分析
- Dubbo实现原理之基于SPI思想实现Dubbo内核