c++ tuple元组
C++11 标准新引入了一种类模板,命名为 tuple(中文可直译为元组)。tuple 最大的特点是:实例化的对象可以存储任意数量、任意类型的数据。
tuple 的应用场景很广泛,例如当需要存储多个不同类型的元素时,可以使用 tuple;当函数需要返回多个数据时,可以将这些数据存储在 tuple 中,函数只需返回一个 tuple 对象即可。
tuple是一个固定大小的不同类型值的集合,是泛化的std::pair。我们也可以把他当做一个通用的结构体来用,不需要创建结构体又获取结构体的特征,在某些情况下可以取代结构体使程序更简洁,直观。std::tuple理论上可以有无数个任意类型的成员变量,而std::pair只能是2个成员,因此在需要保存3个及以上的数据时就需要使用tuple元组了。
tuple 模板类对象常用的方法
tuple 模板类对象常用的方法有两种,一种是借助该类的构造函数,另一种是借助 make_tuple() 函数。
类的构造函数
tuple 模板类提供有很多构造函数,包括:
- 默认构造函数
constexpr tuple();
- 拷贝构造函数
tuple (const tuple& tpl);
- 移动构造函数
tuple (tuple&& tpl);
- 隐式类型转换构造函数
template <class... UTypes>tuple (const tuple<UTypes...>& tpl); //左值方式
template <class... UTypes>tuple (tuple<UTypes...>&& tpl); //右值方式
- 支持初始化列表的构造函数
explicit tuple (const Types&... elems); //左值方式
template <class... UTypes>explicit tuple (UTypes&&... elems); //右值方式
- 将pair对象转换为tuple对象
template <class U1, class U2>tuple (const pair<U1,U2>& pr); //左值方式
template <class U1, class U2>tuple (pair<U1,U2>&& pr); //右值方式
例子:
#include <iostream> // std::cout
#include <tuple> // std::tuple
using std::tuple;int main()
{std::tuple<int, char> first; // 1) first{}std::tuple<int, char> second(first); // 2) second{}std::tuple<int, char> third(std::make_tuple(20, 'b')); // 3) third{20,'b'}std::tuple<long, char> fourth(third); // 4)的左值方式, fourth{20,'b'}std::tuple<int, char> fifth(10, 'a'); // 5)的右值方式, fifth{10.'a'}std::tuple<int, char> sixth(std::make_pair(30, 'c')); // 6)的右值方式, sixth{30,''c}return 0;
}
make_tuple()函数
上面程序中,我们已经用到了 make_tuple() 函数,它以模板的形式定义在 头文件中,功能是创建一个 tuple 右值对象(或者临时对象)。
对于 make_tuple() 函数创建了 tuple 对象,我们可以上面程序中那样作为移动构造函数的参数,也可以这样用:
auto first = std::make_tuple (10,'a'); // tuple < int, char >
const int a = 0; int b[3];
auto second = std::make_tuple (a,b); // tuple < int, int* >
程序中分别创建了 first 和 second 两个 tuple 对象,它们的类型可以直接用 auto 表示。
tuple的创建和初始化
std::tuple<T1, T2, TN> t1; //创建一个空的tuple对象(使用默认构造),它对应的元素分别是T1和T2...Tn类型,采用值初始化。
std::tuple<T1, T2, TN> t2(v1, v2, ... TN); //创建一个tuple对象,它的两个元素分别是T1和T2 ...Tn类型; 要获取元素的值需要通过tuple的成员get<Ith>(obj)进行获取(Ith是指获取在tuple中的第几个元素,请看后面具体实例)。
std::tuple<T1&> t3(ref&); // tuple的元素类型可以是一个引用
std::make_tuple(v1, v2); // 像pair一样也可以通过make_tuple进行创建一个tuple对象
tuple常用函数
为了方便您在实际开发中使用 tuple 对象,tupe 模板类提供了一个功能实用的成员函数, 头文件中也提供了一些和操作 tuple 对象相关的函数模板和类模板,如表 1 所示。
例子:
#include <iostream>
#include <tuple>int main()
{int size;//创建一个 tuple 对象存储 10 和 'x'std::tuple<int, char> mytuple(10, 'x');//计算 mytuple 存储元素的个数size = std::tuple_size<decltype(mytuple)>::value;//输出 mytuple 中存储的元素std::cout << std::get<0>(mytuple) << " " << std::get<1>(mytuple) << std::endl;//修改指定的元素std::get<0>(mytuple) = 100;std::cout << std::get<0>(mytuple) << std::endl;//使用 makde_tuple() 创建一个 tuple 对象auto bar = std::make_tuple("test", 3.1, 14);//拆解 bar 对象,分别赋值给 mystr、mydou、myintconst char* mystr = nullptr;double mydou;int myint;//使用 tie() 时,如果不想接受某个元素的值,实参可以用 std::ignore 代替std::tie(mystr, mydou, myint) = bar;//std::tie(std::ignore, std::ignore, myint) = bar; //只接收第 3 个整形值//将 mytuple 和 bar 中的元素整合到 1 个 tuple 对象中auto mycat = std::tuple_cat(mytuple, bar);size = std::tuple_size<decltype(mycat)>::value;std::cout << size << std::endl;return 0;
}
程序执行结果为:
10 x
100
5
如何获取元素的值
获取tuple对象元素的值可以通过get(obj)方法进行获取;
Ith - 是想获取的元素在tuple对象中的位置。
obj - 是想获取tuple的对象
// tuple_size
#include <iostream> // std::cout
#include <tuple> // std::tuple, std::tuple_sizeint main ()
{std::tuple<int, char, double> mytuple (10, 'a', 3.14);std::cout << "mytuple has ";std::cout << std::tuple_size<decltype(mytuple)>::value;std::cout << " elements." << '\n';//获取元素std::cout << "the elements is: ";std::cout << std::get<0>(mytuple) << " ";std::cout << std::get<1>(mytuple) << " ";std::cout << std::get<2>(mytuple) << " ";std::cout << '\n';return 0;
}//输出结果:
mytuple has 3 elements.
the elements is: 10 a 3.14
c++ tuple元组相关推荐
- python中元组的使用_Python当中tuple元组的使用
Python Python开发 Python语言 Python当中tuple元组的使用 python当中元组的使用比起list列表来说就简单多了!因为tuple一般是不能进行修改的,一旦进行定义则无法 ...
- pythontuple数据类型_Python基础教程2d–数据类型-tuple(元组)
1定义 tuple(元组)也是一种顺序结构的数据类型,定义一个空元组的方法用英文小括号: 变量名=() t = () 定义一个包含了多个元素的元组在小括号中用逗号分隔开各个元素: 源码print('\ ...
- Python基础教程:list列表、tuple元组、range常用方法总结
list 列表(数组),是可迭代对象,列表是可变的所以列表的方法都是在列表本身更改的.里面看可以放各种数据类型的数据,可存储大量数据 连接列表可以使用 + 或 extend() a = [1, 3, ...
- Python第三、四种数据类型——List(列表) and Tuple(元组)
目录 一. List(列表) 1.定义一个 List 2. 对 List 进行截取(大致方法与String的截取类似) 3. 添加一个元素,使用 append() 方法 4.删除一个元素,使用 pop ...
- pythontuple([1、2、3)_Python 进阶之路 (三) Tuple元组使用指南
比List更安全的数据类型 大家好,今天为大家介绍一种更为安全的Python内置数据类型:tuple(元组),以及它的基础用法 元组是什么 元组(tuple)是另一种有序的数据类型,与list比较类似 ...
- java 元组 getinteger_TS数据类型:从C++/Java/Python到TS看元组tuple—元组的来龙去脉...
在C++有Java这种强类型语言中,常用的Array.List.Set ,在集合中只能是一种类型(可以复习下:<再谈Java数据结构-分析底层实现与应用注意事项). int data[] = n ...
- pythontuple数据类型_Python数据类型之Tuple元组实例详解
本文实例讲述了Python数据类型之Tuple元组.分享给大家供大家参考,具体如下: tuple元组 1.概述 本质上是一种有序的集合,和列表非常的相似,列表使用[]表示,元组使用()表示. 特点:一 ...
- Python序列 数据类型 创建方式 Tuple元组 Str字符串 List列表 dict字典 Set集合 range,zip,map,enumerate
Python 序列分类 数据类型 详细介绍 Python 主要数据类型: 元组Tuple, 字符串Str,列表List,字典Dict,集合Set 对比 元组Tuple 字符串Str 列表List 字典 ...
- Python语法-1-变量、输出、List列表、tuple元组、条件判断和循环等重要基础知识
针对Openmv3上的Python应用(摘录带修改) 输出 1. 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: print( ...
- Python数据容器、list列表、tuple元组、str字符串、数据容器(序列)切片、set集合、dict字典、字符串大小比较
数据来源 01 数据容器 为什么学习数据容器 数据容器 总结 02 列表 1)列表定义 为什么需要列表 列表的定义语法 列表的定义方式 演示 """ 演示数据容器之:li ...
最新文章
- P1800 software_NOI导刊2010提高(06)
- DirectX11 With Windows SDK--22 立方体映射:静态天空盒的读取与实现
- 健康很重要 程序员应该坚持正确的坐姿工作
- 全网最全 Python 操作 Excel 教程,建议收藏!
- 时频分析:短时傅立叶变换实现(4)
- 北工大计算机网络基础期末考试,2013北工大计算机网络应用复习提纲整理版.doc...
- 用户登录功能:说简单也困难
- Python机器学习:线型回归法06最好的衡量线型回归法的指标RSquared
- Vi编辑器的基本使用方法及vi和Vim的区别【ZT】
- 宏、函数、宏和函数的区别
- Rust: codewars 的Count of positives / sum of negatives
- SAP BASIS ADM100 中文版 Unit 2(1)
- mac android studio plantuml,Mac 配置 PlantUML
- 对口升学考试计算机专业好考吗,2017届对口升学考试计算机专业月考三试题
- windows 挂载百度网盘/阿里云盘等(网盘变本地硬盘) alist + raidrive
- java获取经纬度_java调用高德地图api获取某个位置的经纬度
- 生活中软件易用性的例子_多用“举出例子”“比如说”,来进行生活中的语言交流...
- QT报错:Gtk-Message:Failed to load module “gail“
- 二见钟情之UML时序图
- linux修改ip,mac命令和qt中编程修改