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?相关推荐

  1. std::tuple、std::tie(可用于结构体大小比较)、std::pair用法

    1.tuple应用: 解释:是一个元组,可包含无限多不同类型变量,pair的升级版,但没有pair得成员变量first.second. 1.1.代码: // tuple example #includ ...

  2. std::tuple大总结

    tuple的那些事 元组的使用 典型使用 创建和初始化 元组的访问和修改 元组的元素个数 元组的解包 元组的元素类型获取 元组的拼接 元组的遍历 C++11引入了一个新的较实用的模板类型,std::t ...

  3. std::tuple, std::pair, std::tie 快速掌握

    tuple是可以存异构元素的容器,比如可以在一个容器中同时存储int.string.bool等. 作为对比,vector只能存储同类型的元素.tuple可做作为struct的一种更简洁高效的替代. 使 ...

  4. std::pair std::tuple std::tie

    std::pair 固定包含两个数据,Defined in header <utility> 场景 pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的m ...

  5. C++:std::tuple使用说明

    目录 一.如何创建std::tuple 二.std::tuple中的元素是在堆中创建的还是在栈中创建的 三.如何获取std::tuple中存放的元素个数 四.如何获取std::tuple中存放的元素类 ...

  6. C++11中std::tuple的使用

    std::tuple是类似pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tuple可以有任意数量的成员 ...

  7. std::tuple类型

    1. 元组简介 std::tuple是类似std::pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tu ...

  8. boost::spirit模块利用 std::tuple 将多个属性包装成一个的测试程序

    boost::spirit模块利用 std::tuple 将多个属性包装成一个的测试程序 实现功能 C++实现代码 实现功能 boost::spirit模块利用 std::tuple 将多个属性包装成 ...

  9. C++ vector<std::tuple<XXX, XXX, XXX>>

    c++ vector套tuple 遍历 C++ vector<std::tuple<XXX, XXX, XXX> > std::vector<std::tuple< ...

最新文章

  1. JavaScript常见集合操作
  2. 在ASP.Net2.0中使用UrlRewritingNet实现链接重写(转)
  3. 利用jQuery对无序列表排序 http://www.apkbus.com/android-80639-1-1.html
  4. PYTHON之路(四)
  5. Python标准库的强大功能的相关介绍
  6. 组合模式java怎么获取钥匙_java中组合模式详解和使用方法
  7. .NET Core下使用gRpc公开服务(SSL/TLS)
  8. P4495-[HAOI2018]奇怪的背包【数论,dp】
  9. ubuntu 16.04 + apache2 将php7.1 切换到 php7.3
  10. Spring Boot 返回XML
  11. 浏览器内核之WebKit 架构与模块
  12. 使用dd工具对磁盘RAID5和10进行I/O性能测试
  13. RS232、RS485、RS422、RJ45接口,终于弄明白了!
  14. python写出租车计费系统_关于使用Python——写出租车计费系统
  15. 二分法求解方程的根java_【数值分析】利用二分法和牛顿公式求解方程的根
  16. 天梯L2-029 特立独行的幸福
  17. uniapp选择图片及图片预览的实现
  18. 字节跳动重大宣布:取消!员工炸了:直接降薪1
  19. 汉信码在iOS客户端中的应用和遇到的坑
  20. 标签云的实现(使用jQuery插件jqcloud)

热门文章

  1. Spark 常见问题小结
  2. php获取蓝凑云文件列表,php调用蓝奏云下载接口
  3. 宝塔面板服务器ip地址修改_「网站」快速搭建服务器环境及网站
  4. win10计算机从桌面消失了,Windows10家庭版程序窗口在桌面上消失了解决方法
  5. [转载] Java8新特新--Stream语法应用在ArrayList的元素移除和排序
  6. [转载] Java static关键字与static{}语句块
  7. [转载] Python学习笔记——运维和Shell
  8. linux定时任务执行url,科技常识:linux定时任务访问url实例
  9. Java Byte类的hashCode()方法及示例
  10. MySQL 精选 60 道面试题(含答案)