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;

}

时间: 2024-10-02 09:42:25

boost数据结构tuple的相关文章

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

1 #include <boost/tuple/tuple.hpp> 2 #include <boost/tuple/tuple_io.hpp> 3 #include <boost/tuple/tuple_comparison.hpp> 4 #include <iostream> 5 #include <string> 6 7 void TestTuple1() 8 { 9 typedef boost::tuple<std::string,

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

any是一种特殊的容器,它只能容纳一个元素,但这个元素可以是任意类型;    可以用any保存任何类型,在任何需要的时候取出它;    这种功能和shared_ptr<void>类似,但是any是类型安全的;    any不是一个模板类,但是其有模板构造函数,从而实现任意类型;    空的any构造函数创建一个空的any对象,不持有任何值;    成员函数empty()可判断any是否为空;    成员函数swap(...)可交换两个any的值;    如果any持有一个对象,函数type()

C++11新的数据结构tuple

Tuple简介 tuple是C++ 11新的标准库之一,其表示N元数组,它相当于有N个成员的结构体,只不过这个结构体的成员都是匿名的.tuple是类似于pair的模板,tuple像是pair的泛化版本,pair只能存放两个成员,而tuple则可以多个成员,相同的是,pair和tuple都允许其成员的类型不一样. tuple的用途 tuple的最常见的用途就是作为函数的返回值,利用它,可以实现函数返回多个值.(虽然C++通过结构体也可以实现返回多个值得能力,但是相对tuple来说会更繁琐一些.)

Boost入门

[转载网友转载的 不过不知道原作者地址] Boost入门向导 简介:boost是一套开源的.高度可移植的C++模板库.它由C++标准委员发起,且里面很多组件有望成为下一代的C++标准库,其地位将会与STL一样.boost库的英文站点是http://www.boost.org.如果上个页面不能访问,可以看http://boost.c-view.org,它是Boost镜像.boost按功能分为:字符串.容器.算法.迭代器.数据结构.内存管理.多线程.IO等.其中字符串组中的正规表达式可以与POSIX

boost::string or boost::regex

有时候写代码时会遇到下面问题 如果有一个文本文件,其包括内容类似于C语言,当中有一行例如以下格式的语句: layout (local_size_x = a,local_size_y = b, local_size_z = c) in; 当中用蓝色标记出的部分(layout, local_size_x, local_size_y, local_size_z, in)为keyword,斜体字部分(a, b, c)为数据类型为unsigned int的数字,请编写一个函数,用于从文件里抽取出a, b,

tuple,list,dict,set用法

python基础 复杂数据类型(数据结构) tuple:元组,使用小括号表示,包含若干个数据元素,可以为空,数据元素的类型可以为任意类型,它是不可变对象(创建后不可改变,不能增删改除) list:列表,使用中括号表示,包含若干个数据元素,可以为空,数据元素的类型可以为任意类型,它是可变对象,查询和插入效率很低,并且列表越长,查询和插入速度越慢,消耗内存空间小 dict:字典,使用花括号表示,包含若干个键值对(Key-Value Pair,也称为-值对)数据,Key不能重复并且必须为不可变对象,具

python 迭代器和生成器

迭代器 Iterator是迭代器的意思,它的作用是一次产生一个数据项,直到没有为止.这样在 for 循环中就可以对它进行循环处理了.那么它与一般的序列类型(list, tuple等)有什么区别呢?它一次只返回一个数据项,占用更少的内存.但它需要记住当前的状态,以便返回下一数据项.它是一个有着next()方法的对象.而序列类型则保存了所有的数据项,它们的访问是通过索引进行的. 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末

Storm基本概念以及Topology的并发度

Spouts,流的源头 Spout是Storm里面特有的名词,Stream的源头,通常是从外部数据源读取tuples,并emit到topology Spout可以同时emit多个tupic stream,通过OutputFieldsDeclarer中的declareStream,method来定义 Spout需要实现RichSpout端口,最重要的方法是nextTuple,storm会不断调用接口从spout中取数据,同时需要注意的是Spout分为reliable or unreliable两种

Python迭代器和生成器介绍

Python迭代器和生成器介绍 迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration. 在for循环中,Python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作. 常用的几个内建数据结构tuple.list.set.dict都支持迭代器,字符串也可以使用迭代操作. 你也可以自己实现一个迭代器,如上所述,只