tuple可以存储不同类型的对象在一个tuple对象中,不同于pair,tuple可以储存多于两个的数据。tuple相关的操作和定义都是定义在命名为tuple的头文件中的。
1.tuple的操作
上表中的操作是tuple中常用的操作,tuple的使用主要用于函数的返回值,如果一个函数想要返回多个不同的数据类型的返回值,就可以用tuple进行返回。
2.tuple定义和初始化
显式定义初始化
显式定义一个tuple时需要显式的指出每个成员的类型:
tuple<size_t, size_t, size_t> threeD;//三个成员均为零
tuple<string, vector<double>, vector<int>>
someVal("hello", { 1.0,2.0 }, { 1,0,2,4 });
//tuple只能直接初始化
tuple<size_t, size_t, size_t> threeD = {1,2,3};//错误
tuple<size_t, size_t, size_t> threeD{1,2,3};//正确
隐式定义初始化
隐式初始化采用make_tuple来进行初始化,这样可以不用指定数据类型,数据类型由初始化数据推断而来。
auto item = make_tuple("9999", 15, "hello");
item的数据类型为tuple<string,int,string>
3.tuple成员的访问方式
tuple的访问方式使用get<i>(a)
来进行访问,其返回a对象的第i个成员。
当我们使用隐世的方式初始化对象时,我们可以采用deltype
来获取tuple的类型。deltype的相关内容参考:deltype
可以用tuple_size<i,tupleType>来获取相关成员的类型;
案例:
auto item = make_tuple("9999", 15, "hello");
auto val=get<1>(threeD);//获取threeD中的第一个成员的值。
tuple_element<1, decltype(item)>::type val = get<1>(item);//val是一个int类型,val=15
4.tuple关系运算
当两个tuple数据类型一样,并且存储的对象也分别对应相等时两个tuple相等,可以用==进行比较。与此同时tuple还定义了<符号。