码迷,mamicode.com
首页 > 其他好文 > 详细

std::tuple

时间:2018-08-04 13:03:15      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:定义   实参   img   构造函数   auto   play   exp   closed   cat   

tuple,元组类型。头文件<tuple>,
tuple是一个固定大小的不同类型(异质,heterogeneous)值的集合(这一点是tuple与其他常规STL容器的最大不同,即它可以同时存放不同类型的数据)。
泛化的std::pair(也即std::pair是tuple的一个特例,长度受限为2)。
当我们定义一个std::tuple时,需要指出每个成员的类型, std::tuple<int, std::string> tu{ 2,"12iop" };

1、希望将一些数据组合成单一对象,但又不想麻烦地定义一个新数据结构来表示这些数据时,std::tuple是非常有用的。我们可以将std::tuple看作一个”快速而随意”的数据结构。

2、创建一个std::tuple对象时,可以使用tuple的默认构造函数,它会对每个成员进行值初始化;也可以为每个成员提供一个初始值,此时的构造函数是explicit的,因此必须使用直接初始化方法。

3、一个std::tuple类型的成员数目是没有限制的,因此,tuple的成员都是未命名的。要访问一个tuple的成员,就要使用一个名为get的标准库函数模板。为了使用get,我们必须指定一个显式模板实参,它指出我们想要访问第几个成员get<0>。

 

make_tuple: 用于创建tuple

技术分享图片
1 auto tup1 = std::make_tuple("Hello World!", a, 3.14, 0);
2 
3 std::tuple<int, char> sixth(std::make_pair(30, c));  
4 std::cout << "sixth contains: " << std::get<0>(sixth);  
View Code

 

tie: 用于拆开tuple

技术分享图片
1 auto tup1 = std::make_tuple(3.14, 1, a);
2 double a;
3 int b;
4 char c;
5 std::tie(a, b, c) = tup1;
View Code

 

ignore:如果不想要某一位的值,可以直接将其用ignore代替。

技术分享图片
1 std::tie(ignore, b, c) = tup1;
View Code

 

 

forward_as_tuple: 用于接受右值引用数据生成tuple

技术分享图片
1 auto tup2 = std::forward_as_tuple(1, "hello");
2 创建了一个tuple<int &&, char (&)[6]>类型的元组。tuple中的参数全部为右值引用。而前面讨论的tie函数就只能接受左值。
View Code

 

tuple_cat: 用于连接tuple

技术分享图片
1 std::tuple<float, string> tup1(3.14, "pi");
2 std::tuple<int, char> tup2(10, a);
3 auto tup3 = tuple_cat(tup1, tup2);
4 将tup1和tup2连起来就成了tup3。
View Code

 

std::tuple

标签:定义   实参   img   构造函数   auto   play   exp   closed   cat   

原文地址:https://www.cnblogs.com/osbreak/p/9418269.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!