C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 类型
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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};//error
tuple<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 标准库特殊设施)输出补白
C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型
C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式
C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 返回多个值