• boost数据结构tuple


    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()
    {
        
    return make_tuple(1"cpp"3.0);
    }

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

        
    //tuple
        MY_TUPLE t1;
        MY_TUPLE t2(
    23"Michael");
        MY_TUPLE t3(t1);
        MY_TUPLE t4 = t1;
        cout << 
    "(" << t2.get<0>() << ","
             << t2.get<
    1>() << ","
             << t2.get<
    2>() << ")" << endl;
        MY_TUPLE tu1 = make_tuple(
    1"Peak"1.000);
        MY_TUPLE tu2 = make_tuple(
    2"Step"2.000);
        assert(tu1 < tu2);

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

        MY_TUPLE tt1(
    1"string"2.33);
        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交换变量
        int a = 23;
        
    int b = 24;
        cout << 
    "a = " << a << "," << "b = " << b << endl;
        tie(a, b) = make_tuple(b, a);
        cout << 
    "a = " << a << "," << "b = " << b << endl;

        
    //更多用法...


        cin.get();
        
    return 0;
    }


  • 相关阅读:
    Oracle exp/imp导出导入工具的使用
    导入导出数据语句小结
    改变一生的五句话
    给年轻工程师的十大忠告
    项目经理三步曲(项目经理成长版)
    写作、写程序的快乐和痛苦
    《Excel与VBA程序设计(mini版)》
    《3S新闻周刊》第三期发布: 解密Google Earth
    《Excel与VBA程序设计》进度(2006.3.8)
    Arc2Earth正式发布
  • 原文地址:https://www.cnblogs.com/MakeView660/p/7145004.html
Copyright © 2020-2023  润新知