boost之tuple

原创 2017年01月03日 17:16:03

tuple的基本用法

#include <iostream>
#include <boost/typeof/typeof.hpp>
#include <boost/assign.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_io.hpp>
using namespace std;
using namespace boost;
using namespace boost::assign;
using namespace boost::tuples;

int main()
{
    ///////初始化
    typedef boost::tuple<int, string, double> my_tuple;
    my_tuple t1;
    my_tuple t2(1,"lijiajia");
    my_tuple t3(t1);
    my_tuple t4 = t1;

    ////元素类型是引用的时候,初始化时必须赋初值
    int x = 10;
    boost::tuple<int&>t5(x);

    ///////make_tuple
    make_tuple(2,3.0);
    make_tuple(string(),vector<int>());

    /////访问元素使用t.get<>()
    BOOST_AUTO(tt,make_tuple(1,"char[]",100.0));
    assert(tt.get<0>() == 1);
    assert(tt.get<1>() == "char[]");
    assert(tt.get<2>() == 100.0);

    //////访问元素使用boost::get<>()
    cout<<get<0>(tt);
    assert(get<0>(tt) == 1);
    assert(get<1>(tt) == "char[]");
    assert(get<2>(tt) == 100.0);

    make_tuple(1, 11.11, string("lijiajia"));

    ////////比较操作
    typedef boost::tuples::tuple <int, double, string>my_tuple1;
    //my_tuple1 tt1 = make_tuple(1, 11.11, string("lijiajia"));/////不起效果  why boost::tuples::make_tuple(1, 11.11, string("lijiajia"))
    //my_tuple1 tt2 = make_tuple(2,22.22,string("caoyanyan"));/////不起效果   why boost::tuples::make_tuple(1, 11.11, string("lijiajia"))
    my_tuple1 tt1(1, 11.11, string("lijiajia"));
    my_tuple1 tt2(2, 22.22, string("caoyanyan"));
    my_tuple1 tt3(tt2);
    assert(tt1 > tt2);
    assert(tt2 == tt3);


    /////输入输出

    cout << "tt1 = " << tt1 << endl;/////不起效果  why  加上#include <boost/tuple/tuple_io.hpp>
    cout << "tt2 = " << tt2 << endl;/////不起效果  why  加上#include <boost/tuple/tuple_io.hpp>
    cout << "please input the tt1:" << endl;
    cin >> tt1;/////不起效果  why   加上#include <boost/tuple/tuple_io.hpp>
    cout <<"tt1 = " <<tt1 << endl;

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



    /////tie的使用
    int i;
    double d;
    string s;
    tie(i, d, s) = boost::tuples::make_tuple(1,22.2,"lijiajia");
    cout << "i = " << i << endl << "d = " << d << endl << "s = " << s << endl;

    /////占位符的使用tuples::ignore
    tie(i, tuples::ignore, tuples::ignore) = boost::tuples::make_tuple(1,NULL,NULL);


    ////tie使用于pair
    tie(i, s) = make_pair(1,"lijiajia_caoyanyan");
    cout << "i = " << i << endl<< "s = " << s << endl;


    //////与assign结合使用
    vector<my_tuple1> my_vec = tuple_list_of(1,11.11,"lijiajia")(2,22.22,"caoyanyan");
    assert(my_vec.size() == 2);
    my_vec += boost::tuples::make_tuple(3, 33.33, "dabao"), boost::tuples::make_tuple(4, 44.44, "baierwei");
    assert(my_vec.size() == 4);


    system("pause");
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

类似Boost中Tuple的实现

  • 2010年10月23日 10:37
  • 935KB
  • 下载

Boost库之tuple、any和variant的使用

Boost库中提供了三种比较实用的数据结构,分别是tuple、any和variant。它们的共同优点就是支持类型安全地存储和获取数据。灵活地使用这三种数据结构,对我们进行程序设计无疑是大有裨益的。下面...

boost::tuple学习笔记

在C++中函数只能返回一个值,std标准库中也没有能很好满足tuple功能的类实现,boost::tuple 则填补了这一空缺。    元素 目前版本的boost::tuple支持0~10元...

boost::tuple 用法详解

用法 Tuples 位于名字空间 tuples, 后者又位于名字空间 boost. 使用这个库要包含头文件 "boost/tuple/tuple.hpp"。关系操作符的定义在头文件"boost/...
  • lofeo
  • lofeo
  • 2011年07月26日 14:25
  • 2008

boost源码剖析之:Tuple Types(rev#2)

boost源码剖析之:Tuple Types(rev#2) http://blog.csdn.net/pongba/article/details/1560754   动机[1] ...

boost库的使用_tuple

tuple的使用 一 Boost::tuple     很多的时候我们经常需要为我们的函数返回多个值,一般的做法是通过传入非常量的指针或引用,但是这样的话可能可读性就要差一些,使用者可能需...

boost源码剖析之:Tuple Types(rev#2)

boost源码剖析之:Tuple Types(rev#2)   刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba)   Note: 并非新作,0...

boost.tuple 类型 容器相关的

一 Boost::tuple 和pair有些类似,pair是只能容纳两个类型的对象 boost.typle是std:pair的延伸 可以将std:pair视作boost.tuple的一个特例 std...

Boost源码剖析之:增强的std::pair--Tuple Types (一)

0 动机[1] 假设你有这样一个函数:它接受两个整型数据并返回它们整除的结果,像这样: int DevideInts(int n,int d) { return n/d...

boost源码剖析之:Tuple Types(rev#2)

boost源码剖析之:Tuple Types(rev#2) 刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba) Note: 并非新作,04年...
  • vsooda
  • vsooda
  • 2012年03月24日 13:27
  • 470
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:boost之tuple
举报原因:
原因补充:

(最多只允许输入30个字)