std::tuple介绍和使用

基本概念

std::tuple 是 C++11 中引入的一个标准库类型,它代表了一个固定大小的不同类型值的集合。元组可以被看作是 std::pair 的泛化形式,std::pair 只能保存两个元素,而 std::tuple 可以保存任意数量的元素。

从概念上讲,它们类似于C的结构体,但是不具有命名的数据成员,我们也可以把他当做一个通用的结构体来用,不需要创建结构体又具备结构体的特征,在某些情况下可以取代结构体使程序更简洁,直观。

选择使用 std::tuple 还是结构体(struct)取决于你的具体需求和应用场景。如果你需要表示一个具有明确意义和长期存在的数据结构,或者如果你的数据组合很简单并且元素之间的关系是固定的,那么结构体可能是更好的选择。结构体在表示具有明确意义和长期存在的数据结构时仍然更为合适。结构体提供了命名的成员,这使得代码更加可读和维护,特别是在大型项目和多人协作的项目中。std::tuple 更适合用于临时组合多个值,尤其是在不需要为这些值定义一个新类型的情况下。

常用接口

创建和初始化元组

    std::tuple<int, double, std::string> t1(42, 3.14, "hello");std::tuple<int, double, std::string> t2 = std::make_tuple(42, 3.14, "hello");

访问元素

使用 std::get<I>(tuple) 来访问元组中的第 I 个元素,其中 I 是一个编译时已知的索引。

    std::tuple<int, double, std::string> t(42, 3.14, "hello");std::cout << "int: " << std::get<0>(t) << std::endl;std::cout << "double: " << std::get<1>(t) << std::endl;std::cout << "string: " << std::get<2>(t) << std::endl;

修改元组元素

    std::tuple<int, double, std::string> t(42, 3.14, "hello");std::get<0>(t) = 100;  // 修改第一个元素std::get<1>(t) = 2.71; // 修改第二个元素std::get<2>(t) = "world"; // 修改第三个元素

使用 std::tie 解包元组

    std::tuple<int, double, std::string> t(42, 3.14, "hello");int i;double d;std::string s;std::tie(i, d, s) = t; // 使用 std::tie 解包元组std::cout << "int: " << i << std::endl;std::cout << "double: " << d << std::endl;std::cout << "string: " << s << std::endl;

使用场景

函数返回多个值

当一个函数需要返回多个值时,可以使用元组来打包这些值。

存储不同类型数据

demo

#include <tuple>
#include <iostream>// 计算一个数的平方和立方,并返回这两个结果作为一个元组
std::tuple<int, int> square_and_cube(int number) {int square = number * number;int cube = number * number * number;return std::make_tuple(square, cube);
}int main() {std::tuple<int, double, std::string> t1(42, 3.14, "hello");std::tuple<int, double, std::string> t2 = std::make_tuple(42, 3.14, "hello");// 输出元组中的元素std::cout << std::get<0>(t1) << ", " << std::get<1>(t1) << ", " << std::get<2>(t1) << std::endl;std::cout << std::get<0>(t2) << ", " << std::get<1>(t2) << ", " << std::get<2>(t2) << std::endl;std::get<0>(t1) = 100;  // 修改第一个元素std::get<1>(t1) = 2.71; // 修改第二个元素std::get<2>(t1) = "world"; // 修改第三个元素std::cout << "int: " << std::get<0>(t1) << std::endl;std::cout << "double: " << std::get<1>(t1) << std::endl;std::cout << "string: " << std::get<2>(t1) << std::endl;int i;double d;std::string s;std::tie(i, d, s) = t1; // 使用 std::tie 解包元组std::cout << "int: " << i << std::endl;std::cout << "double: " << d << std::endl;std::cout << "string: " << s << std::endl;int number = 5;// 调用函数并获取返回的元组auto results = square_and_cube(number);// 解包元组int square, cube;std::tie(square, cube) = results;// 输出结果std::cout << "The square of " << number << " is " << square << std::endl;std::cout << "The cube of " << number << " is " << cube << std::endl;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

291个地级市资源错配指数、劳动和资本相对扭曲指数(2006-2021年)

01、数据介绍 资源错配指数&#xff08;Misallocation Index&#xff09;是一个用于衡量资源配置效率的指标&#xff0c;它衡量的是生产要素的配置是否合理&#xff0c;是否达到了最优的状态。资源错配指数越高&#xff0c;资源的利用效率越低。资源错配指数主要用于衡量各种生…

PWM波型-脉冲宽度调制

一、什么是PWM信号 PWM&#xff0c;英文全称Pulse Width Modulation&#xff0c;是脉冲宽度调制的缩写&#xff1b;简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用于测量&#xff0c;通信&#xff0c;功率控制与变换等…

企业实施定制鞋厂ERP软件需要注意哪些问题?

企业实施定制鞋厂ERP软件是个复杂的管理系统工程&#xff0c;为了成功地为企业定制实施ERP软件&#xff0c;需要注意和解决几个关键的问题&#xff1a; . 确立ERP系统实施和定制的决策者&#xff1b;. 做好前期咨询与调研工作&#xff1b;. 做好系统产品或项目迭代规划&#x…

Uds诊断协议的请求和响应的寻址

一根总线上挂载着很多ECU&#xff0c;那么基于CAN协议UDS的诊断请求报文&#xff0c;诊断仪是如何发给ECU的&#xff1f;如何精准的找到想要诊断的那个ECU&#xff1f;ECU又是如何将诊断响应的报文返回给诊断仪&#xff1f; 在UDS协议中&#xff0c;规定了诊断请求和响应报文发…

记录:阿里云服务器网站搭建(3)

Docker安装配置Tomcat 拉取镜像 docker pull tomcat:8启动一个tomcat容器用于拷贝配置文件 docker run -d -p 8080:8080 --name tomcat tomcat:8拷贝容器内tomcat配置文件和日志到本地准备映射 docker cp tomcat:/usr/local/tomcat/conf /mydata/tomcat/confdocker cp tomca…

WebStorm2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 WebStorm是一款由JetBrains公司开发的强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于前端开发。它提供了丰富的功能和工具&#xff0c;包括代码编辑器、调试器、版本控制集成等&#xff0c;使开发人员能够更…

LocalAi,Ollama+AnythingLLM搭建部署本地大模型AI知识库,汉化版本

AnythingLLM 是一个全栈应用程序&#xff0c;您可以使用商业现成的 LLM 或流行的开源 LLM 和 vectorDB 解决方案来构建私有 ChatGPT&#xff0c;无需任何妥协&#xff0c;您可以在本地运行&#xff0c;也可以远程托管并能够智能聊天以及您提供的任何文件。 AnythingLLM 将您的文…

人工智能大模型培训老师叶梓 探索知识库问答中的查询图生成:处理多跳复杂问题的新方法

在人工智能领域&#xff0c;基于知识库的问答&#xff08;KBQA&#xff09;技术正变得越来越重要。它使得机器能够理解自然语言问题&#xff0c;并从结构化的知识库中检索答案。然而&#xff0c;面对多跳复杂问题&#xff0c;传统的KBQA方法往往力不从心。近期&#xff0c;研究…

GitLab存储空间满了

1. 背景 前两天同事反馈&#xff0c;代码推送不到服务器了&#xff0c;GitLab报500错误&#xff0c;我等了一天都变好。登录服务器查看GitLab虚拟机&#xff0c;发现磁盘满了。于是用如下命令释放出了一部分空间&#xff1a; journalctl --vacuum-time1s 释放了1秒前的日志&am…

芒果超媒的“乘风破浪”,差了一点市场海浪的反馈

4月21日晚间&#xff0c;芒果超媒发布了2023年度&2024一季度报告。 芒果超媒2023年实现营业收入146.28亿元&#xff0c;同比增长4.66%&#xff1b;净利润35.56亿元&#xff0c;同比增长90.73%&#xff1b;基本每股收益1.90元。公司拟每10股派发现金红利1.8元。2024年第一季…

数据可视化(八):Pandas时间序列——动态绘图,重采样,自相关图,偏相关图等高级操作

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

怎么将“学生信息表.csv”由CSV格式转换成JSON格式

怎么将“学生信息表.csv”由CSV格式转换成JSON格式 将CSV文件转换为JSON格式&#xff0c;你可以使用Python的内置库如csv和json。下面是一个简单的示例&#xff0c;说明如何执行此转换&#xff1a; 首先&#xff0c;确保你已经安装了Python。 创建一个Python脚本&#xff08;…

腾讯云服务器价格明细表2024年最新(CPU内存/带宽/磁盘)

腾讯云服务器价格明细表2024年最新&#xff08;CPU内存/带宽/磁盘&#xff09;腾讯云服务器租用优惠价格表&#xff1a;轻量应用服务器2核2G3M价格61元一年&#xff0c;2核2G4M价格99元一年、135元15个月、540元三年&#xff0c;2核4G5M带宽165元一年、252元15个月、756元3年&a…

动态规划(Dynamic Programming,简称 DP)

动态规划(Dynamic Programming,简称 DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式来求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。通过保存和重用已经解决的子问题的解,来避免重复计算,从而大…

mybatis使用xml中的if-else/choose

最近需要使用 xml 文件来实现一些增删改查&#xff0c;此文对 其中的 if-else 加以说明 背景&#xff1a; 有一个引用类&#xff0c;假设叫 Student public class Student {private String name; private String address; private Integer yn;}现在我们查询条件也被封装成一个…

2024 应届校招经验分享(非互联网篇)

&#x1f4e2;&#x1f4e2;&#x1f4e2; 2024年应届毕业生&#xff0c;浙江大学计算机研究生。自23年秋招开始至今&#xff0c;博主先后拿到了互联网行业、机械制造行业、国企央企、高校体制等多家企业和单位的数十个Offer&#xff0c;了解多行业中的计算机求职方向&#xff…

Java转go,我用了12小时,10小时在解决环境问题

Part1 问题背景 作为一个资深的Java开发者&#xff0c;我深知面向对象的高级语言&#xff0c;语法是不用学的。需要的时候搜索就可以了&#xff0c;甚至可以用ChatGPT来写。 之前我做一个安全多因素校验服务。因为是临时服务&#xff0c;扩展性上基本没有要求&#xff0c;为了快…

Vulnhub靶机 DC-6 打靶实战 详细渗透测试过程

Vulnhub靶机 DC-6 详细渗透流程 打靶实战 目录 Vulnhub靶机 DC-6 详细渗透流程 打靶实战一、将靶机导入到虚拟机当中二、渗透测试主机发现端口扫描信息探测web渗透目录爆破爆破后台密码反弹shell搜集有价值信息SSH远程登录提权反弹jens用户权限的shell 提权利用 一、将靶机导入…

stable diffusion本地部署@win10

一键无脑安装stable-diffusion-webui stable diffusion是当前非常出色的文生图模型&#xff0c;要优于以前gan文生图模型。现在有了stable-diffusion-webui软件&#xff0c;可以一键安装&#xff0c;大大简化了操作难度。本文档就是stable-diffusion-webui在windows 10上的安装…

openfeign整合sentinel进行降级

pom.xml <!--nacos-服务注册发现--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--添加openfeign依赖--> <dependency&g…