std::tuple还是struct?
std::tuple是C++11提供的新模板类,可以翻译为“元组”,可把多个不同类型的变量组合成一个对象。std::tuple可看做std::pair的泛化实现,std::pair包含两个元素,std::tuple 可以同时包含多个元素,它拥有 struct 的表现,但是无需定义实际的 struct,可用于一个函数返回多个值的场景下。
从实际使用来看,struct的可读性比std::tuple的。当我们希望将一些数据组合成单一对象,但又不想定义一个新数据结构来表示这些数据时,std::tuple是相对合适,我们可以把std::tuple看作一个”快速而随意”的数据结构。
std::tuple元素是位于连续的内存区域,而非链式结构。
废话不多说,上代码:
#include <tuple>
#include <iostream>
#include <string>
#include <stdexcept>std::tuple<double, char, std::string> get_student(int id)
{if (id == 0) return std::make_tuple(3.8, 'A', "Lisa Simpson");if (id == 1) return std::make_tuple(2.9, 'C', "Milhouse Van Houten");if (id == 2) return std::make_tuple(1.7, 'D', "Ralph Wiggum");throw std::invalid_argument("id");
}int main()
{auto student0 = get_student(0);std::cout << "ID: 0, "<< "GPA: " << std::get<0>(student0) << ", "<< "grade: " << std::get<1>(student0) << ", "<< "name: " << std::get<2>(student0) << '\n';double gpa1;char grade1;std::string name1;std::tie(gpa1, grade1, name1) = get_student(1);std::cout << "ID: 1, "<< "GPA: " << gpa1 << ", "<< "grade: " << grade1 << ", "<< "name: " << name1 << '\n';// C++17 结构化绑定:auto [ gpa2, grade2, name2 ] = get_student(2);std::cout << "ID: 2, "<< "GPA: " << gpa2 << ", "<< "grade: " << grade2 << ", "<< "name: " << name2 << '\n';
}
输出结果如下:
ID: 0, GPA: 3.8, grade: A, name: Lisa Simpson
ID: 1, GPA: 2.9, grade: C, name: Milhouse Van Houten
ID: 2, GPA: 1.7, grade: D, name: Ralph Wiggum
细心的开发者可能会问 std::tie,std::tie作用是将变量的引用整合成一个tuple,从而实现批量赋值。
std::tuple还是struct?相关推荐
- std::tuple、std::tie(可用于结构体大小比较)、std::pair用法
1.tuple应用: 解释:是一个元组,可包含无限多不同类型变量,pair的升级版,但没有pair得成员变量first.second. 1.1.代码: // tuple example #includ ...
- std::tuple大总结
tuple的那些事 元组的使用 典型使用 创建和初始化 元组的访问和修改 元组的元素个数 元组的解包 元组的元素类型获取 元组的拼接 元组的遍历 C++11引入了一个新的较实用的模板类型,std::t ...
- std::tuple, std::pair, std::tie 快速掌握
tuple是可以存异构元素的容器,比如可以在一个容器中同时存储int.string.bool等. 作为对比,vector只能存储同类型的元素.tuple可做作为struct的一种更简洁高效的替代. 使 ...
- std::pair std::tuple std::tie
std::pair 固定包含两个数据,Defined in header <utility> 场景 pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的m ...
- C++:std::tuple使用说明
目录 一.如何创建std::tuple 二.std::tuple中的元素是在堆中创建的还是在栈中创建的 三.如何获取std::tuple中存放的元素个数 四.如何获取std::tuple中存放的元素类 ...
- C++11中std::tuple的使用
std::tuple是类似pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tuple可以有任意数量的成员 ...
- std::tuple类型
1. 元组简介 std::tuple是类似std::pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tu ...
- boost::spirit模块利用 std::tuple 将多个属性包装成一个的测试程序
boost::spirit模块利用 std::tuple 将多个属性包装成一个的测试程序 实现功能 C++实现代码 实现功能 boost::spirit模块利用 std::tuple 将多个属性包装成 ...
- C++ vector<std::tuple<XXX, XXX, XXX>>
c++ vector套tuple 遍历 C++ vector<std::tuple<XXX, XXX, XXX> > std::vector<std::tuple< ...
最新文章
- JavaScript常见集合操作
- 在ASP.Net2.0中使用UrlRewritingNet实现链接重写(转)
- 利用jQuery对无序列表排序 http://www.apkbus.com/android-80639-1-1.html
- PYTHON之路(四)
- Python标准库的强大功能的相关介绍
- 组合模式java怎么获取钥匙_java中组合模式详解和使用方法
- .NET Core下使用gRpc公开服务(SSL/TLS)
- P4495-[HAOI2018]奇怪的背包【数论,dp】
- ubuntu 16.04 + apache2 将php7.1 切换到 php7.3
- Spring Boot 返回XML
- 浏览器内核之WebKit 架构与模块
- 使用dd工具对磁盘RAID5和10进行I/O性能测试
- RS232、RS485、RS422、RJ45接口,终于弄明白了!
- python写出租车计费系统_关于使用Python——写出租车计费系统
- 二分法求解方程的根java_【数值分析】利用二分法和牛顿公式求解方程的根
- 天梯L2-029 特立独行的幸福
- uniapp选择图片及图片预览的实现
- 字节跳动重大宣布:取消!员工炸了:直接降薪1
- 汉信码在iOS客户端中的应用和遇到的坑
- 标签云的实现(使用jQuery插件jqcloud)
热门文章
- Spark 常见问题小结
- php获取蓝凑云文件列表,php调用蓝奏云下载接口
- 宝塔面板服务器ip地址修改_「网站」快速搭建服务器环境及网站
- win10计算机从桌面消失了,Windows10家庭版程序窗口在桌面上消失了解决方法
- [转载] Java8新特新--Stream语法应用在ArrayList的元素移除和排序
- [转载] Java static关键字与static{}语句块
- [转载] Python学习笔记——运维和Shell
- linux定时任务执行url,科技常识:linux定时任务访问url实例
- Java Byte类的hashCode()方法及示例
- MySQL 精选 60 道面试题(含答案)