您当前的位置: 首页 > 

我什么都布吉岛

暂无认证

  • 2浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

tuple是快速随意的结构体

我什么都布吉岛 发布时间:2020-10-16 17:10:28 ,浏览量:2

一、tuple等价于结构体

假设我们希望存储学号int、姓名string和城市string的一组数据,这组数据不能使用一个vector来存储,因为vector只能存储同类数据。最简单的方法就是定义一个结构体:

struct info
{
	int ID,
	string name,
	string city
};
Zhangsaninfo={1,"zhangsan","nanjing"};
Lisiinfo={2,"Lisi","Guangzhou"};

在新标准下,tuple模板也能完成这个任务:

tuple Zhangsaninfo(1,"zhangsan","nanjing");
tuple Lisi(1,"Lisi","Guangzhou");

如果说vector是同类数据的集合,那么tuple就是可以不同类的集合。回想一下,我们不能返回多个函数值,但是可以返回一个结构体来完成相同的操作,有了tuple模板,更是简洁的完成了这一任务。

二、tuple的初始化

使用之前需要增加头文件支持#include,tuple初始化没有顺序容器这么多形式,要么默认初始化,要么每个成员都指定值。

tuple t1;//形式1:默认初始化、
tuple t2(v1,v2,...,vn);//形式2:指定值初始化
tuple t3(t2);//形式3:拷贝构造

可以借助make_tuple(v1,v2,...,vn)完成tuple的拷贝初始化。

tuple t1=make_tuple(v1,v2,...,vn);
tuple t2={v1,v2,...,vn};//error,等号形式拷贝构造,为了完成拷贝构造将会尝试调用形式2完成拷贝构造过程,但是形式2进行了explicit声明,所以调用失败
tuple t3{v1,v2,...,vn};//ok,调用指定值初始化构造函数
三、tuple访问
get(tup);//访问tup中的第i个元素的引用,引用是左右属性取决于tup是左值还是右值
四、tuple成员数量和类型获取

因为tuple没有size成员,所以我们需要通过辅助的类模板来获取tuple成员数量:

tuple_size::value

如:

tuple info(1, "apple", 2.0);
tuple_size::value;

每一个成员的类型也可以通过:

tuple_element::type

如:

tuple_size::type;

利用新声明可以简化:

typedef decltype trans;
size_t sz=tuple_size::value;
tuple_element cnt=get(item);
四、判断

和容器类似有:== =! >= >

关注
打赏
1658157489
查看更多评论
0.0412s