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. VS报表图解《一》---菜鸟版

    与原先的开发环境VB.EXE不同VS2013自带了报表控件ReportViewer能够内部实现报表的设计,本文主要通过绑定数据集来实现报表的显示 1.加入:reportviewer控件,当将控件显示在 ...

  2. 解决grep的结果无法显示文件名的问题

    有时候想在代码中执行某个关键词,会用下面的语句: find . -type f -name "*.java" | xargs grep -n "<keyword&g ...

  3. 详细解说 STL 排序(Sort)(转)

    作者Winter 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1.1 所有sort算法介绍 1.2 sort 中的比较函数 1.3 sor ...

  4. C++中返回对象的情形及RVO

    http://www.cnblogs.com/xkfz007/archive/2012/07/21/2602110.html 之前有文章介绍过临时对象和返回值优化RVO方面的问题.见此处. 在C++中 ...

  5. JDBC:数据库操作:处理大对象CLOB数据

    目标: 了解大对象处理基本原理, 掌握CLOB数据的读,写操作. 可以使用CLOB类处理大文本数据. 大对象处理主要指CLOB和BLOB两种类型字段.可以大量存储文字. 要想在程序中处理这样的大数据操 ...

  6. linux安装php sphinx出错

    安装sphinx的php客户端 # wget -c http://pecl.php.net/get/sphinx-1.3.0.tgz # .tgz # cd sphinx- # phpize # ./ ...

  7. c++ 头文件循环引用解法

    A.h #include "B.h" class A{ public: B* m_b; } B.h #include "A.h" class B{ public ...

  8. AngularJS体验式编程系列文章

    AngularJS体验式编程系列文章,将介绍如何用angularjs构建一个强大的web前端系统.angularjs是由Google团队开发的一款非常优秀web前端框架.在当前如此多的web框架下,a ...

  9. C#通过webbrowser控件与javascript交互

    1.C#里调用控件里面网页的js函数     //调用JavaScript的messageBox方法,并传入参数     object[] objects = new object[1];     o ...

  10. zookeeper(五):Zookeeper中的Access Control(ACL)

    概述 传统的文件系统中,ACL分为两个维度,一个是属组,一个是权限,子目录/文件默认继承父目录的ACL.而在Zookeeper中,node的ACL是没有继承关系的,是独立控制的. Zookeeper的 ...