c++之 std::tie
简介
在c++ 11标准库中,加入了std::tie,在c++ 14中改进,方便使用。 其与tuple关系密切, 主要目的是方便地使用tuple。
元组 std::tuple
元组tuple,有人认为是std::pair扩展。pair只能把2个数据打包,而tuple可以打包更多的数据,虽然超过了9个时,其方式就比较搞笑了。
template<class _Ty1,class _Ty2>struct pair{ // store a pair of valuestypedef pair<_Ty1, _Ty2> _Myt;typedef _Ty1 first_type;typedef _Ty2 second_type;pair(): first(), second(){ // default construct}pair(const _Ty1& _Val1, const _Ty2& _Val2): first(_Val1), second(_Val2){ // construct from specified values}template<class _Other1,class _Other2,class = typename enable_if<is_convertible<const _Other1&, _Ty1>::value&& is_convertible<const _Other2&, _Ty2>::value,void>::type>pair(const pair<_Other1, _Other2>& _Right): first(_Right.first), second(_Right.second){ // construct from compatible pair}//......
为生成pair, c++ 提供了make_pair的快捷操作。
而tuple的定义:
template<class _This,class... _Rest>class tuple<_This, _Rest...>: private tuple<_Rest...>{ // recursive tuple definition
public:typedef _This _This_type;typedef tuple<_This, _Rest...> _Myt;typedef tuple<_Rest...> _Mybase;static const size_t _Mysize = 1 + sizeof...(_Rest);tuple(): _Mybase(),_Myfirst(){ // construct default}template<class... _Rest2>explicit tuple(_Tuple_alloc_t, _Rest2&&... _Rest_arg): _Mybase(_STD forward<_Rest2>(_Rest_arg)...),_Myfirst(allocator_arg){ // construct smuggled allocator_arg_t element}template<class... _Other,class = typename _Tuple_enable<tuple<const _Other&...>, _Myt>::type>tuple(const tuple<_Other...>& _Right): _Mybase(_Right._Get_rest()), _Myfirst(_Right._Myfirst._Val){ // construct by copying same size tuple}// ....
相应地,c++ 标准库提供了make_tuple 内联方法,快速创建tuple对象。
std::tie
一般std::tie有2个作用:
- 创建一个std::tuple;
- 解包标准库中的一些集合类,简化访问方法。
生成tuple
使用极为简单,可以使用构造函数,内联快捷方法。
示例:
// 定义时 初始化
std::tuple<int, double, std::string> student1 = { 1, 98.0, "David" };
// 使用构造函数
std::tuple<int, double, std::string> student2 ( 2, 99.2, "david2" );
下面的示例使用内联快捷方法。 这里还使用了新版本c++支持的类型auto
, 让编译器自动判断类型 – 虽然传统的我并不喜欢-- 编译时,编译器要选择至少支持C11版本. 如果使用VS,可以看到这些设置。
在linux/macOS上,在g++ build时,指定std, 如:
g++ tuple_sample.cpp -o tuple_sample -std=c++11
代码示例:
auto student2 = std::make_tuple(11, 98, "Tom" );
使用std:tie
,则也可以简单处理:
string name3 = "david3";
int id3 = 3;
double d3 = 99.3;
tuple<int, double, string> student3 = std::tie(id3, d3, name3);
解包数据
使用std::tie
可以对一些集合类型进行解包,包括set, tuple, pair … 简化数据访问并赋值到变量。
如示例:
int id3;
string name3;
std::tie(id3, std::ignore, name3) = student3;
cout << "tie student-" << id3 << " \t " << name3 << endl;
注意: 这里使用std:ignore跳过数据对象中不关心的数据。
输出:
tie student-3 david3
c++之 std::tie相关推荐
- std::tie简单介绍
参考链接 std::tie详解 std::tie
- std::tuple、std::tie(可用于结构体大小比较)、std::pair用法
1.tuple应用: 解释:是一个元组,可包含无限多不同类型变量,pair的升级版,但没有pair得成员变量first.second. 1.1.代码: // tuple example #includ ...
- std::tie详解
std::tie:创建左值引用的 tuple,或将 tuple 解包为独立对象 返回值 含左值引用的 std::tuple 对象. 注意 std::tie 可用于解包 std::pair ,因为 st ...
- 从一个小题中的应用来体会下std::tie的便利之处
文章目录 前言 解题过程 爬楼梯的最少成本 题目分析 DP优化 利用tie进行写法优化 std::tuple std::tuple的访问 std::tie函数中使用std::ignore占位 总结 前 ...
- 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 ...
- std::tie 创建左值引用的 tuple,或将 tuple 解包为独立对象
说明 std::tie : 创建左值引用的 tuple,或将 tuple 解包为独立对象 可以对std::tuple以及std::pair进行解包 返回值 含左值引用的 std::tuple 对象. ...
- boost::tie或std::tie是啥
简介 学boost库的时候,遇到一段代码,函数返回类型是boost::tribool 类型.代码里用了boost::tie函数,有点蒙蔽了.查资料总结如下,std也有对应的实现. 基本概念先弄清, ...
- C++11中std::tuple的使用
std::tuple是类似pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tuple可以有任意数量的成员 ...
最新文章
- tf.InteractiveSession()与tf.Session()
- 谷歌TensorFlow Lite支持Core ML
- 计算机课中初中一年级学生特点分析,初中信息技术说课稿:计算机的组成
- linux 文件名带特殊符号,Linux删除含有特殊符号文件名的文件
- Android开发之注解式框架ButterKnife在ADT中的设置
- 如何创建一个最小的串口、TTY设备包括虚拟控制台,串口以及伪终端设备的驱动程序
- Springpath专注于思科OEM开发工作
- Android学习笔记--Menu菜单的使用
- JdbcTemplate 的使用
- onethink中的用户登录session签名
- Activity传递数据
- vue 插件(Sublime Text 3 常用插件以及安装方法)(转)
- WebServer服务器开发的基本逻辑
- 毫秒级超低延时直播产品实测(PRTC直播/webRTC直播)
- java程序猿面试问缺点怎么回答_当程序员面试被问“你的缺点是什么?”你该怎么回答?...
- I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之声卡驱动移植
- FPGA Implementation of BPSK Modulator and Demodulator
- SQL求和一个表之后和另一个表数据进行关联
- hdu 2977 Color Squares
- python类的使用
热门文章
- 数据结构之二叉树基本操作
- java 麻将的发牌与洗牌_JAVA程序设计(11)-----面对对象初级设计 麻将 创建麻将牌 然后洗牌 发牌~ 恩 就这样...
- 《红楼梦》人物关系有多复杂?一张图帮你理清楚!
- 这个国家要弃用Windows操作系统?我们的国产操作系统却没什么人用
- 数字电视专业术语--DTV名词扫盲
- Android-蓝牙通信
- vscode python无法跳转到函数定义
- C# 理解Thread.Sleep()方法
- KCP协议:从TCP到UDP家族QUIC/KCP/ENET
- 环信php创建群组,群组@功能