C++标准学习--tuple

以下帖子介绍的比较详细:

C++的 tuple_c++ tuple-CSDN博客

tuple 是 C++11 新标准里的类型,它是一个类似 pair 类型的模板。tuple 是一个固定大小的不同类型值的集合,是泛化的 std::pair。我们也可以把它当做一个通用的结构体来用,不需要创建结构体又获取结构体的特征,在某些情况下可以取代结构体使程序更简洁直观。std::tuple 理论上可以有无数个任意类型的成员变量,而 std::pair 只能是2个成员,因此在需要保存3个及以上的数据时就需要使用 tuple 元组,而且每个确定的 tuple 类型的成员数目是固定的。

「注意」:使用tuple的相关操作需要包含相应头文件:#include<tuple>

tuple 所支持的操作

make_tuple(v1,v2,v3,v4…vn) :返回一个给定初始值初始化的tuple,类型从初始值推断。
t1 == t2 :当两个tuple具有相同数量的成员且成员对应相等时。
t1 != t2 :与上一个相反。
get(t) :返回t的第i个数据成员。
tuple_size::value :给定了tuple中成员的数量。

#include <iostream>
#include <tuple>
using namespace std;

int main()
{
        auto t3 = make_tuple(1, 2, "3c", 'F');

        cout<< "the 1st elem: " << get<0>(t3) << ", is of type: " << typeid(get<0>(t3)).name()<< endl;
        cout<< "the 2nd elem: " << get<1>(t3) << ", is of type: " << typeid(get<1>(t3)).name()<< endl;
        cout<< "the 3rd elem: " << get<2>(t3) << ", is of type: " << typeid(get<2>(t3)).name()<< endl;
        cout<< "the 4th elem: " << get<3>(t3) << ", is of type: " << typeid(get<3>(t3)).name()<< endl;
        return 0;
}
该程序的输出结果是:

tuple似乎非常有用,比如在设计统一接口时,传入不定数量和不同类型的参数时候。

#include <iostream>
#include <tuple>
using namespace std;

void func(tuple<int> tp){printf("in func 1\n");}
void func(tuple<int , int > tp){printf("in func 2\n");}
void func(tuple<int , int , const char*> tp){printf("in func 3\n");}
void func(tuple<int , int , const char* , char > tp){ printf("in func 4\n");}

int main()
{
        auto t3 = make_tuple(1, 2, "3c", 'F');
        const int i = 0;
        cout<< "the 1st elem: " << get<i>(t3) << ", is of type: " << typeid(get<0>(t3)).name()<< endl;
        cout<< "the 2nd elem: " << get<1>(t3) << ", is of type: " << typeid(get<1>(t3)).name()<< endl;
        cout<< "the 3rd elem: " << get<2>(t3) << ", is of type: " << typeid(get<2>(t3)).name()<< endl;
        cout<< "the 4th elem: " << get<3>(t3) << ", is of type: " << typeid(get<3>(t3)).name()<< endl;
        auto t2 = make_tuple(1, 2, "3c");
        auto t1 = make_tuple(1, 2);
        auto t0 = make_tuple(1);

        func(t3);
        func(t2);
        func(t1);
        func(t0);

        return 0;
}

输入结果为:

更为集中的话还可以这样:

void func(tuple<int> tp){printf("in func 1\n");}
void func(tuple<int , int > tp){printf("in func 2\n");}
void func(tuple<int , int , const char*> tp){printf("in func 3\n");}
void func(tuple<int , int , const char* , char > tp){ printf("in func 4\n");}
#if 1
void minimum(auto tp)
{
        int size = tuple_size<decltype(tp)>::value;
        cout << "input size: " << size << endl;
        func(tp);
}
#endif

int main()
{
        auto t3 = make_tuple(1, 2, "3c", 'F');
        auto t2 = make_tuple(1, 2, "3c");
        auto t1 = make_tuple(1, 2);
        auto t0 = make_tuple(1);
        minimum(t3);
        minimum(t2);
        minimum(t1);
        minimum(t0);

        return 0;
}

输出结果是:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/311412.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Electron中调用dll

截止目前Electron的官方稳定版本已经更新到了28.1.1。我在创建Electron项目时用的28.0.0版本&#xff0c;后面在项目中有用到调用dll方法的需求&#xff0c;大致的实现就是将后端给的dll文件引入到项目中&#xff0c;安装ffi-napi依赖&#xff0c;然后进行使用。但是在Electron…

js逆向第16例:猿人学第12题入门级js

文章目录 一、前言二、定位关键参数三、代码实现一、前言 任务:抓取这5页的数字,计算加和并提交结果 既然是入门级,那肯定很简单了 二、定位关键参数 控制台查看请求数据,m值应该就是关键参数了 进入堆栈 马上定位到了m值"m": btoa(yuanrenxue + window.pag…

【scala】编译build报错 “xxx is not an enclosing class“

private[sources] val creationTimeMs: Long {val session SparkSession.getActiveSession.orElse(SparkSession.getDefaultSession)require(session.isDefined)private[xxx]是访问权限控制在xxxx包的意思。 解决办法&#xff1a; 把[sources]删掉&#xff0c;或者改成和包名…

Element|Upload结合Progress实现上传展示进度条

背景 &#xff1a; 项目里的 附件上传 题型组件&#xff0c;用户在上传过程中&#xff0c;如果文件较大&#xff0c;上传过程较慢&#xff0c;而又没有一个类似 Loading... 的加载过程的话&#xff0c;会显得干愣愣的&#xff0c;用户体验较差&#xff0c;所以需要添加一个进度…

JDBC初体验(二)——增、删、改、查

本课目标 理解SQL注入的概念 掌握 PreparedStatement 接口的使用 熟练使用JDBC完成数据库的增、删、改、查操作 SQL注入 注入原理&#xff1a;利用现有应用程序&#xff0c;将&#xff08;恶意的&#xff09;SQL命令注入到后台数据库引擎执行能力&#xff0c;它可以通过在…

[C#]winform部署PaddleOCRV3推理模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR.git 【算法介绍】 PaddleOCR是由百度公司推出的一款开源光学字符识别&#xff08;OCR&#xff09;工具&#xff0c;它基于深度学习框架PaddlePaddle开发。这款工具提供了一整套端到端的文字检测和识别解决方案&a…

灵魂三连问:是5G卡吗?支持5G吗?是5G套餐吗

关于5G的问题&#xff0c;小伙伴们的疑问是不是很多&#xff0c;它和4G到底有什么区别呢&#xff1f;什么是5G卡&#xff1f;什么是5G套餐&#xff1f;支持5G吗&#xff1f;什么是5G基站&#xff1f;我想大家现在一定是晕的&#xff0c;下面小编来给大家解惑&#xff01; 1&…

MySQL中datetime和timestamp的区别

datetime和timestamp的区别 相同点: 存储格式相同 datetime和timestamp两者的时间格式都是YYYY-MM-DD HH:MM:SS 不同点: 存储范围不同. datetime的范围是1000-01-01到9999-12-31. 而timestamp是从1970-01-01到2038-01-19, 即后者的时间范围很小. 与时区关系. datetime是存储…

Redis Zset类型

Redis Zset类型 Zset&#xff08;有序集合&#xff09;它是集合的一种&#xff0c;不仅可以保存元素&#xff0c;还可以为每个元素关联一个 double 类型的分数&#xff08;score&#xff09;&#xff0c;Redis 正是通过分数来为集合中的元素进行从小到大的排序。在 Zset 中&am…

1.11.。。。

1 有道云笔记 2 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTextToSpeech>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QW…

STL之vector

目录 vector的定义和特性 vector的定义和结构非常简单&#xff0c;它由以下几个重要的部分组成&#xff1a; vector的常用函数 vector排序去重 排序 去重 代码示例 vector的定义和特性 在c中&#xff0c;vector是一个动态数组容器&#xff0c;可以存储一系列相同类型的…

【Docker】Linux中Docker技术入门与实战及实用的常规命令

目录 一、引言 1. 说明&#xff1a; 2. Linux介绍 3. Docker简介 二、Docker三要素 1. 镜像&#xff08;Image&#xff09; 2. 容器&#xff08;Container&#xff09; 3. 仓库&#xff08;Repository&#xff09; 三、实现案例 1. 创建 2. 设置镜像 3. 开启设置 …

基于自适应遗传算法的车间调度matlab仿真,可以任意调整工件数和机器数,输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 编码与初始化 4.2 适应度函数 4.3 遗传操作 4.4 自适应机制 4.5 终止条件 5.完整程序 1.程序功能描述 基于自适应遗传算法的车间调度matlab仿真,可以任意调整工件数和机器数,输出甘…

【AI】搭建Windows Linux子系统(WSL2)CUDA环境

0.准备工作 Windows本机安装CUDA Driver 首先去下载页面下载驱动文件 点击Get CUDA Driver进入下载页面&#xff0c;我看下载页面跟普通驱动下载页面相同&#xff0c;感觉应该不是单独的驱动&#xff0c;只要之前显卡已经安装好了CUDA的驱动&#xff0c;就可以先省略这一步。…

4024A/B/C/D/E/F/G/H/L频谱分析仪

01 4024A/B/C/D/E/F/G/H/L频谱分析仪 产品综述&#xff1a; 4024频谱分析仪系列产品具有工作频段宽、性能指标高、扫描速度快、测试功能多、操作简便等多重优点&#xff0c;性能指标方面具有优良的平均噪声电平、相位噪声以及扫描速度&#xff0c;测量功能方面具有频谱分析、…

NetSuite 收入管理模块与总账的数据一致性检查

收入管理模块是NetSuite的一个艰深功能领域&#xff0c;能够有所实践&#xff0c;知原理懂变化的实施顾问少之又少。很高兴&#xff0c;我们的财务顾问Chris在23年底经历了一次深入的NetSuite收入管理模块的实践&#xff0c;对收入管理模块与总账递延收入和收入数据的一致性检查…

MySQL中order by是怎么工作的?

在如上图中所示的explain的执行结果中&#xff0c;Extra字段中的“Using filesort”表示的就是需要排序&#xff0c;MySQL会给每个线程分配一块内存用于排序&#xff0c;称为sort_buffer。 索引city如上图所示 上述语句的执行流程如下&#xff1a; 1、初始化sort_buffer&…

由于找不到msvcp140.dll无法继续执行代码原因及解决教程分享

在计算机打开软件过程&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“由于找不到msvcp140.dll无法继续执行代码”。这个错误通常发生在使用Microsoft Visual C 2015或更高版本编译的程序运行时。那么&#xff0c;什么是msvcp140.dll文件&#xff1f;为什么会…

竞赛保研 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…

中国社科院大学与美国杜兰大学金融管理硕士项目——熬过寒冬,春日暖阳已不远

在金融领域&#xff0c;寒冬似乎成了无法避免的阶段。然而&#xff0c;对于那些坚守岗位的金融从业者来说&#xff0c;熬过寒冬并非无望。正如冬去春来&#xff0c;只要我们采取明智的策略&#xff0c;迈出坚定的步伐&#xff0c;春日的暖阳已在不远方照耀。社科院与美国杜兰大…