boost数据结构tuple

tuple(元组)定义了一个有固定数目元素的容器,其中每个元素类型可以不相同,这与其它容器有着本质的区别!
vector和array虽然可以容纳很多元素,但是元素的类型必须一致;
tuple很有用,它是pair的泛化,可以从函数返回任意数量的值,也可以代替struct组合数据;
boost.tuple使用库的方式为C++增加了这种很有用的数据结构,已被纳入C++ 11 TR1标准草案.

标准库中的pair是tuple的特例,即2-tuple(仅能持有两个成员的元组);
tuple声明很简单,默认最多支持10个模板类型参数,支持嵌套定义;
如果tuple元素类型是引用,那么在初始化时必须给予初值;
tuple实现紧凑,构造和访问函数都是内联的,很容器被编译器优化,可代替struct;
tuples提供了两个辅助类element和length,可以获得tuple的一些相关信息;
element<N,T>::type可以给出T中第N个元素的类型,length<T>::value可以给出T的元素数量,T是一个tuple类型.

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
/* boost_tuple.cpp
    tuple(元组)定义了一个有固定数目元素的容器,其中每个元素类型可以不相同,这与其它容器有着本质的区别!
    vector和array虽然可以容纳很多元素,但是元素的类型必须一致;
    tuple很有用,它是pair的泛化,可以从函数返回任意数量的值,也可以代替struct组合数据;
    boost.tuple使用库的方式为C++增加了这种很有用的数据结构,已被纳入C++ 11 TR1标准草案.

标准库中的pair是tuple的特例,即2-tuple(仅能持有两个成员的元组);
    tuple声明很简单,默认最多支持10个模板类型参数,支持嵌套定义;
    如果tuple元素类型是引用,那么在初始化时必须给予初值;
    tuple实现紧凑,构造和访问函数都是内联的,很容器被编译器优化,可代替struct;
    tuples提供了两个辅助类element和length,可以获得tuple的一些相关信息;
    element<N,T>::type可以给出T中第N个元素的类型,length<T>::value可以给出T的元素数量,T是一个tuple类型;
*/

#include <iostream>
#include <string>
#include <vector>
#include <cassert>

#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_comparison.hpp>
#include <boost/tuple/tuple_io.hpp>
#include <boost/assign.hpp>

using namespace std;
using namespace boost;

typedef tuple<int,string,double> MY_TUPLE;
MY_TUPLE my_func()
{
    );
}

int main(void)
{
    //回顾pair
, "Michael");
    cout << "(" << myPair.first << "," << myPair.second << ")" << endl;

//tuple
    MY_TUPLE t1;
    MY_TUPLE t2(, "Michael");
    MY_TUPLE t3(t1);
    MY_TUPLE t4 = t1;
    cout << >() << ","
         << t2.get<>() << ","
         << t2.get<>() << ")" << endl;
    MY_TUPLE tu1 = make_tuple();
    MY_TUPLE tu2 = make_tuple();
    assert(tu1 < tu2);

MY_TUPLE tuu();
    cout << tuu << endl;
    cout << "please input tuple tuu:";
    //cin >> tuu;
    cout << tuu << endl;

MY_TUPLE tt1();
    cout << tuples::set_open('[') << tuples::set_close(']');
    cout << tuples::set_delimiter(',');
    cout << tt1 << endl;

int nRet;
    string strRet;
    double dRet;
    tie(nRet, strRet, dRet) = my_func();
    cout << nRet << endl;
    cout << strRet << endl;
    cout << dRet << endl;

//使用tie交换变量
;
    ;
    cout << "a = " << a << "," << "b = " << b << endl;
    tie(a, b) = make_tuple(b, a);
    cout << "a = " << a << "," << "b = " << b << endl;

//更多用法...

cin.get();
    ;
}

boost数据结构tuple的更多相关文章

  1. Boost C++: 数据结构---tuple

    #include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple_io.hpp> #include <boost/ ...

  2. boost数据结构any(很有用!)

    any是一种特殊的容器,它只能容纳一个元素,但这个元素可以是任意类型;    可以用any保存任何类型,在任何需要的时候取出它;    这种功能和shared_ptr<void>类似,但是 ...

  3. boost数据结构variant

    variant和any有些类似,是一种可变类型,是对C/C++中union概念的增强和扩展:    普通的union只能持有普通数据类型,而不能持有string.vector等复杂类型,而varian ...

  4. Python常见数据结构-Tuple元组

    Python Tuple基本特点 元组与列表类似,不同之处在于元组的元素不能修改. 与字符串和列表一样,可以根据下标进行切片索引. 元组使用小括号,单一元素的元组定义是必须加一个逗号. Python ...

  5. Scala实战高手****第8课:零基础实战Scala最常用数据结构Map和Tuple及Spark源码鉴赏

    本课内容1.Map和Tuple在Spark源码中的鉴赏2.Map和Tuple代码操作实战 ------------------------------------------------------- ...

  6. Boost入门

    [转载网友转载的 不过不知道原作者地址] Boost入门向导 简介:boost是一套开源的.高度可移植的C++模板库.它由C++标准委员发起,且里面很多组件有望成为下一代的C++标准库,其地位将会与S ...

  7. boost::string or boost::regex

    有时候写代码时会遇到下面问题 如果有一个文本文件,其包括内容类似于C语言,当中有一行例如以下格式的语句: layout (local_size_x = a,local_size_y = b, loca ...

  8. python基础2--数据结构(列表List、元组Tuple、字典Dict)

    1.Print函数中文编码问题 print中的编码:# -*- coding: utf-8 -*- 注:此处的#代表的是配置信息 print中的换行符,与C语言相同,为"\n" 2 ...

  9. boost number handling

    Boost.Integer defines specialized for integers. 1. types for integers with number of bits #include & ...

随机推荐

  1. es6常用数组操作及技巧汇总

    定义数组 const array = [1, 2, 3]; // 或者 const array = new Array(); array[0] = '1'; 检测数组 Array.isArray([] ...

  2. scott权限

    有时scott数据被破坏了  可以回复 以下为 安装路径 dos下   @G:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\scott. ...

  3. 关于同一线程两次调用EnterCriticalSection的测试

    #include "stdafx.h" #include <iostream> using namespace std; #include <windows.h& ...

  4. Git 工作区、暂存区和版本库

    基本概念 我们等来理解下Git工作区.暂存区和版本库概念 工作区:就是你在电脑里能看到的目录 强烈推荐git新手阅读 暂存区:英文叫stage,或index.一般存放在igt 目录下的index文件( ...

  5. 在需要隐藏navigationController控制器

    - (void)viewWillAppear:(BOOL)animated {    [super viewWillAppear:animated]; [self.navigationControll ...

  6. IDEA部署Tomcat应用所有接口中文乱码

    解决问题的思路: 1.分析比对http请求头,contentType等设置 2.前段编码,后端解码,这个方式比较落麻烦,凡是有中文乱码的地方都要进行解决 3.修改Tomcat的默认编码,tomcat8 ...

  7. 文件上传之 MultipartFile

    利用MultipartFile(组件)实现文件上传 在java中上传文件似乎总有点麻烦,没.net那么简单,记得最开始的时候用smartUpload实现文件上传,最近在工作中使用spring的Mult ...

  8. Sqlserver 批量数据更改

    insert into AAA select GETDATE(),name from BBB where aid=0 update a set a = b.a,b=b.b,c=b.c from t a ...

  9. javascript深入理解js闭包【手动加精】

    http://www.jb51.net/article/24101.htm 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.   一.变量的作用 ...

  10. The Definitive Guide To Django 2 学习笔记(二) 第二个View 动态内容

    “Hello World”只是简单的展现了Django 基本的工作机制,但它不是动态的网页.第二个View我们将创建一个动态的网页,该页面上将展现当前的时间和日期. 该View需要做两件事,第一,计算 ...