我的编程空间,编程开发者的网络收藏夹
学习永远不晚

浅析C++元组tuple类型

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

浅析C++元组tuple类型

介绍

元组tuple是C++的一个模板,不同tuple类型的成员类型也不相同,但是一个tuple可以有任意数量的成员。

每个tuple类型的成员个数是一定的,但是不同的tuple成员个数可以不同。

tuple的定义及初始化

使用tuple要引入tuple头文件

#include <tuple>

tuple定义以及初始化(我们这里以成员类型为int、string、vector为例子)

tuple<int,string,vector<int>> test{1,"hello,world",{4,5,6}};

当然也可以使用它的构造函数进行初始化

tuple<int, string,vector<int>> test(1,"hello,world",{4,5,6});

存在这种情况,表面上看起来没有进行任何初始化操作,但实际上利用了不带参数的默认构造函数

tuple<size_t, size_t> test;	//每个成员的值为0

当然如果你这样定义后,又想对test的初始值所作更改,可以这样写,如下所示。(实际上现在的test不是原来的test,它被你新创建的tuple对象所替代了,严格意义来讲并不算是初始化)

tuple<size_t, size_t> test;	//每个成员的值为0
test = tuple<size_t, size_t>(1,2);	//第一个成员的值为1,第二个成员的值为2

另外标准库定义了make_tuple函数来生成tuple对象,我们可以用auto关键字来推测生成的tuple的类型

auto test2 = make_tuple(3.14,"wasd");

如果要添加一个vector作为成员,则情况如下

//错误写法
auto test2 = make_tuple(3.14,"wasd",{ 3,4,5 });
//正确写法
vector<int> nums = { 3,4,5 };
auto test2 = make_tuple(3.14,"wasd",nums);

tuple的使用

成员访问

说起tuple的使用,最能直接想到的自然是对tuple的访问了。

在C++标准库里,有一个名为get的函数模板。为了使用get,我们必须指定一个显式模板实参来指示访问的第几个成员,并在函数参数中给予它一个tuple对象。

tuple<int, string, vector<int>> test{ 1,"hello,world",{4,5,6} };
cout << get<0>(test) << endl;		//打印test第一个成员,其类型为int
cout << get<1>(test) << endl;		//打印test第二个成员,其类型为string
cout << get<2>(test)[0] << endl;	//打印test第三个成员vector<int>的第一个元素

下面是返回结果

1
hello,world
4    

获取tuple信息

可用以下方法获取tuple元素个数

tuple<int, double, vector<string>> test{ 1,1.23,{"123","456"}};
//获取tuple成员个数
size_t num = tuple_size<decltype(test)>::value;
//利用tuple某个成员类型来声明变量(以第0个成员为例)
tuple_element<0, decltype(test)>::type n = get<0>(test);

拼接tuple

tuple<int, int, int> test(1,2,3);
tuple<int, int, int> test2(4,5,6);
tuple<int, int, int> test3(7,8,9);
//拼接
auto new_tup = tuple_cat(test, test2, test3);

交换tuple

tuple<int, int, int> test(1,2,3);
tuple<int, int, int> test2(4,5,6);
//交换
test.swap(test2);

tuple解包

tuple使用tie方法进行解包,tie的参数个数与tuple成员个数一致,否则要用ignore占位

tuple<int,int> test{2,8};
tuple<int,int> test2{2,8,6};
int a, b;
//解包
tie(a, b) = test;
//ignore占位的情况
tie(a, b, ignore) = test2;

tuple比较

当两个tuple具有相同数目的成员,且对应成员类型可比较的时候,tuple比较才合法

//有如下四个tuple
tuple<string, string> test{"1","2"};
tuple<int, int, int> test2{ 1,2,3 };
tuple<int,int> test3{1,2};
tuple<int, int> test4{ 4,5 };
test == test2;	//报错,string与int类型不能比较
test2 < test3;	//报错,test2与test3成员数量不同
test3 < test4;	//正确,该语句值为True

tuple遍历

tuple没有迭代器,其遍历非常麻烦,其设计目的也不在于此(如果项目开发过程中要对某一数据结构进行遍历该数据结构应尽量避免为tuple类型,完全可以用list代替)

但此处还是给出遍历的方法(不推荐使用)

本方法来自C++Tuple元组的详细用法 - 知乎 (zhihu.com)

#include <iostream>
#include <tuple>
#include <array>
#include <utility>
using namespace std;
template<class Tuple, size_t N>
struct PrintTuple
{
	static void Printf(const Tuple& Value)
	{
		PrintTuple<Tuple, N - 1>::Printf(Value);
		cout << "," << get<N - 1>(Value);
	}
};
template<class Tuple>
struct PrintTuple<Tuple, 1>
{
	static void Printf(const Tuple& Value)
	{
	     cout << get<0>(Value);
	}
};
template<class... Args>
void PrintfMyTuple(const tuple<Args...>& vlaue)
{
      PrintTuple<decltype(vlaue), sizeof...(Args)>::Printf(vlaue);
}
int main()
{
	tuple<int, int, int, int> a(2, 3, 1, 4);
	PrintfMyTuple(a);
	system("pause");

	return 0;
}

tuple开发时的应用

在项目开发时,如果我们想让一个函数返回多个不同类型的值的话可以使用tuple。

到此这篇关于C++元组tuple类型的文章就介绍到这了,更多相关C++元组tuple类型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

浅析C++元组tuple类型

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用C++多元组Tuple

这篇文章主要讲解了“如何使用C++多元组Tuple”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用C++多元组Tuple”吧!前言tuple 是类似于pair的模板。每个pair的成
2023-06-16

Python数据类型详解(三)元祖:tuple

一.基本数据类型整数:int字符串:str(注:t等于一个tab键)布尔值: bool列表:list 列表用[]元祖:tuple元祖用()字典:dict 注:所有的数据类型都存在想对应的类列里,元祖和列表功能一样,列表可以修改,元祖不能修改
2022-06-04

Python基础数据类型中tuple元组的概念和用法

本篇内容主要讲解“Python基础数据类型中tuple元组的概念和用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python基础数据类型中tuple元组的概念和用法”吧!目录元组简单介绍声明
2023-06-20

C#中元组类型ValueTuple怎么用

这篇文章将为大家详细讲解有关C#中元组类型ValueTuple怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。System.Tuple 类型是在.NET 4.0中引入的,但是有两个明显的缺点:(1)
2023-06-29

如何解析C++的C++数组类型

如何解析C++的C++数组类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C++数组的类型实际上是指数组元素的取值类型,对于同一个数组,其所有元素的数据类型都是相同的,数组名
2023-06-17

C#基元类型、值类型、引用类型是什么

这篇文章主要讲解了“C#基元类型、值类型、引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#基元类型、值类型、引用类型是什么”吧!首先了解下什么是基元类型,基元类型是编译器直接
2023-06-17

Python编程Day6——元组类型、字

1、用途:记录多个值,当多个值没有改变的需求此时元组更为合适2、定义:在()内用逗号分隔开多个任意类型的值(参数为for可以循环的对象)3、常用操作:索引(正取向+反取向)且只能取值不能改变t=('egon',123,['a','b'])p
2023-01-31

4.91Python数据类型之(6)元组

前言有时候,我们为了数值的安全性,不许用户修改数据,今天我们就来讲讲关于python不可变的数据类型---元组数据目录1.元组的基本定义2.元组的基本操作(一)元组的基本定义1.元组的概念:元组(Tuple)是不可变的序列,也是一种可以储存
2023-01-30

C#怎么实现数组元素的数据类型转换

这篇文章主要介绍“C#怎么实现数组元素的数据类型转换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#怎么实现数组元素的数据类型转换”文章能帮助大家解决问题。一、场景假设假设有一串字符串如下所示,字
2023-06-30

浅析JavaScript中的隐式类型转换

在我们学习或者工作中,或多或少会遇到过隐式类型转换,但是为什么会有这种现象?这种现象背后的原理是什么?可能是大多数人没有思考过的,本文就来和大家一起浅析一下
2023-03-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录