c++中的tuple(元组)

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对象是有条件的,就是两个对象的成员数量要相等,在这样的情况下对应位置的成员类型相比较。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yisun03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值