tuple元组定义了一个有固定数目元素的容器,其中的每个元素类型都可以不相同,这与其他容器有着本质的区别.是对pair的泛化。

首先来介绍元组的创建和元组元素的访问。通过make_tuple()创建元组,通过get<>()来访问元组的元素。通过下面这段程序来认识这两个函数的用法:

#include <iostream>

#include <tuple>

#include <functional>

int main()

{

auto t1 = std::make_tuple(10, "Test", 3.14);

std::cout << "The value of t1 is "

<< "(" << std::get<0>(t1) << ", " << std::get<1>(t1)

<< ", " << std::get<2>(t1) << ")\n";

int n = 1;

auto t2 = std::make_tuple(std::ref(n), n);//ref表示引用

n = 7;

std::cout << "The value of t2 is "

<< "(" << std::get<0>(t2) << ", " << std::get<1>(t2) << ")\n";

}

运行结果为:

The value of t1 is (10, Test, 3.14)

The value of t2 is (7, 1)

接下来介绍tie()函数。 tie()函数可以将变量连接到一个给定的tuple上,生成一个元素类型全是引用的tuple,相当于make_tuple(ref(a),ref(b),…)。可以通过tie()函数的使用方便的对tuple进行“解包”操作。看下面的代码:

#include <iostream>

#include <tuple>

int main ()

{

int myint;

char mychar;

float myfloat;

std::tuple<int,float,char> mytuple;

mytuple = std::make_tuple (10, 2.6, 'a');          // packing values into tuple

//std::tie (myint, std::ignore, mychar) = mytuple;   // unpacking tuple into variables  【1】

std::tie (myint,myfloat, mychar) = mytuple;

std::cout << "myint contains: " << myint << std::endl;

std::cout << "mychar contains: " << mychar << std::endl;

std::cout << "myfloat contains: "<< myfloat <<std::endl;

std::get<0>(mytuple) = 100;//修改tuple的值

std::cout <<"After assignment myint contains: "<< std::get<0>(mytuple) << std::endl;

return 0;

}

运行结果:

myint contains: 10

mychar contains: a

myfloat contains: 2.6

After assignment myint contains: 100

注:正如【1】处我们可以使用std::ignore,从而不用关联tuple中的第二个元素.

最后介绍一个tuple_cat()函数,通过该函数可以将多个tuple连接起来形成一个tuple(注:在VC11中只能连接两个tuple并不是真正的多个tuple)。

#include <iostream>

#include <utility>

#include <string>

#include <tuple>

int main ()

{

std::tuple<float,std::string> mytuple (3.14,"pi");

std::pair<int,char> mypair (10,'a');

auto myauto = std::tuple_cat ( mytuple, mypair );

std::cout << "myauto contains: " << std::endl;

std::cout << std::get<0>(myauto) << std::endl;

std::cout << std::get<1>(myauto) << std::endl;

std::cout << std::get<2>(myauto) << std::endl;

std::cout << std::get<3>(myauto) << std::endl;

return 0;

}

运行结果:

myauto contains:

3.14

pi

10

a

C++11 tuple的更多相关文章

  1. c++11 tuple实现

    实现一个简易版的c++11 tuple. 我使用的编译器是gcc,codeblocks13.12自带的,哪个版本我不熟gcc也没去查. 大致看了下他家的tuple实现,多继承,tuple之上还有2个辅 ...

  2. C++11 tuple元组

    C++11 tuple 元组 tuple容器(元组), 是表示元组容器, 是不包含任何结构的,快速而低质(粗制滥造, quick and dirty)的, 可以用于函数返回多个返回值; tuple容器 ...

  3. c++11——tuple元组

    tuple是一个固定大小的不同类型值的集合,是泛化的 std::pair.可以当做一通用的结构体使用,不需要创建结构体而又获取结构体的特征,在某些情况下可以取代结构体,使程序简洁.直观. 创建tupl ...

  4. c#编程指南(四) 组元(Tuple)

    (1).C#语法中一个个问号(?)的运算符是指:可以为 null 的类型. MSDN上面的解释: 在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型以及日期类型的功 ...

  5. C++11_ tuple

    版权声明:本文为博主原创文章,未经博主允许不得转载. tuple 是一个可以装载任何变量的容器,C++11的Variadic Templates给tuple的实现带来了极大方便. tuple的实现基于 ...

  6. 【python基础】第11回 数据类型内置方法 02

    本章内容概要 列表内置方法 字典内置方法 元组内置方法 集合内置方法 可变类型与不可变类型 本章内容详细 1.列表内置方法 list 列表在调用内置方法之后不会产生新的值 1.1 统计列表中的数据值的 ...

  7. Learning storm book 笔记8-Log Processing With Storm

    有代码的书籍看起来就是爽,看完顺便跑个demo,感觉很爽! 场景分析 主要是利用apache的访问日志来进行分析统计 如用户的IP来源,来自哪个国家或地区,用户使用的Os,浏览器等信息,以及像搜索的热 ...

  8. C++可变参数模板实现输出

    C++11 tuple&可变参数模板 template void Print(T value) { std::cout << value << std::endl; } ...

  9. 洗礼灵魂,修炼python(18)--温故加知新

    类型转换: 1.str(),repr(),format():将非字符串数据转换为字符串 str():对象序列化的结果,相当于print输出 repr():程序中某个对象精确值 format():利用特 ...

随机推荐

  1. C语言的运行机制

    目的:通过分析c语言转换成汇编代码后的执行过程对汇编语言和X86构架有一个初步认识 实验代码 1 #include <stdio.h> 2 3 int g(int x) 4 { 5 ret ...

  2. cocos2dx 资源合并.

    文件合并之前 文件合并之后 吐槽 我们项目比较奇葩, ui用cocostudio做, 这项光荣的任务由美术接手. 这个美术是个新手, 经过我长时间的观察, 她似乎不用怎么画画. 至少在很长一段时间里, ...

  3. 人民币符号¥在css和html正确显示

    商城项目需要涉及到人民币的页面现实问题.但是¥(指的是通常输入法中文全角模式下按shift+4的那个)在宋体(v3.03, v5.0)的情况下是显示一杠.常见的其他字体微软雅黑(Microsoft Y ...

  4. 织梦dede标签tags的美化教程

    我们在行dede仿站的时候,经常会遇到tags标签的调用,调用非常简单,官方有专门的调用标签,但是官方的调用是一成不变的模式,dede5.6以前的版本,基本上都是黑色相同大小的表示,而在dede5.7 ...

  5. HTML&CSS基础学习笔记1.33-元素选择器

    元素选择器 最常见的 CSS 选择器是元素选择器.换句话说,文档的元素就是最基本的选择器: p { text-indent:10px; color:blue; } 什么情况下使用元素选择器,一般我们这 ...

  6. tornado项目

    tornado项目之基于领域驱动模型架构设计的京东用户管理后台 本博文将一步步揭秘京东等大型网站的领域驱动模型,致力于让读者完全掌握这种网络架构中的“高富帅”. 一.预备知识: 1.接口: pytho ...

  7. setNeedsDisplay 和 setNeedsLayout-b

    setNeedsDisplay: Marks the receiver’s entire bounds rectangle as needing to be redrawn. drawRect: Th ...

  8. 转:快乐Node码农的十个习惯

    文章来源于:http://www.infoq.com/cn/articles/node.js-habits 从问世到现在将近20年,JavaScript一直缺乏其它有吸引力的编程语言,比如Python ...

  9. 转:如何创建.htaccess文件

    方法1.开始-运行-键入cmd,打开cmd窗口 此时的cmd窗口路径是C:\Documents and Settings\username> 键入以下(不包括括号内信息): copy con . ...

  10. SPSS方差分析

    1.overall:一切的,全面地 单因素方差分析:分析--比较均值--单因素ANOVA.多因素方差分析:分析--一般线性模型--单变量. 单因素方差分析和单变量方差分析区别:单因素针对的是自变量(自 ...