tuple是c++II里出现的类型,和pair类型类似,但pair类型是限定两个任意类型的变量,tuple更加强大,它可以有任意数量的成员。但是每个确定了的tuple类型的成员数目是确定不变的。
1、tuple的用处
当需要将多种不同类型的数据凑在一起的时候,我们可以有两个选择,那就是结构体和tuple,而tuple是更加方便的一个选择。
下面展示tuple的简单示例:
#include<tuple>
#include<vector>
int main()
{
std::tuple<string,int,std::vector<float>> tpl("sun", 1, {1.1, 2.2, 3.3} );
//获得元组的个数
//decltype(tpl)是获得tpl的类型,操作简单
int size = std::tuple_size<decltype(tpl)>::value;
std::cout<<"元组里的个数是: "<<size<<std::endl;
return 0;
}
2、了解tuple
a. tuple是一个模板,tuple里的所有成员都是public的
b. 使用tuple的相关操作需要包含相应头文件,上面代码中的#include<tuple>
c. 可以将不同类型的多种数据组合成tuple类型的单一对象,快而随意
d. tuple的成员数量可以是任意的,这些成员的类型也可以各不相同
e. 一个声明好了的tuple类型的对象的成员数目是固定的了,知道tuple是模板后可以理解这一点,这也表明了声明好的tuple对象 没有增删操作
3、tuple的使用
定义和初始化
如上示例所示,定义tuple时,因为它是一个模板,和其他模板一样,也需要在尖括号里面说明它的成员的类型,而且是指出所有成员的类型。
#include<tuple>
int main()
{
std::tuple<string,int,double> tpl2; //使用tuple默认构造函数
std::tuple<int,std::vector<int>> tpl3(3, {4, 5, 6});//必须使用直接初始化,不能用“=”初始化,
//因为tuple是explicit的
auto tpl4 = make_tuple(7, 8, 9); //可以用make_tuple()函数生成tuple对象,
//此处自动推断出tpl4的类型为tuple<int,int,int>
return 0;
}
访问
a. 用get标准库模板进行访问其元素内容
b. 用tuple_size访问其元素个数
c. 用tuple_element访问其元素类型
#include<tuple>
int main()
{
auto tpl5 = make_tuple(1, 2, 3, 4.4);
//a
auto number = get<3>(tpl5); //返回tuple对象tpl5的第四个成员(和数组一样从0开始计)
//b
auto size = tuple_size<decltype(tpl5)>a::value; //size=4
//c
tuple_element<3, decltype(tpl5)>::type tupleType; //typleType的类型为float
return 0;
}
tuple对象之间的比较
有<和==关系运算符,比较两个tuple对象是有条件的,就是两个对象的成员数量要相等,在这样的情况下对应位置的成员类型相比较。