赞
踩
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对象是有条件的,就是两个对象的成员数量要相等,在这样的情况下对应位置的成员类型相比较。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。