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; } |