头文件:<tuple>

可访问属性:

无(用get方法来访问数据)

可访问方法:

swap(tuple) 和另外一个tuple交换值

其他相关方法:

swap(t1, t2) 交换两个tuple
make_tuple(v1,v2..) 创建一个tuple
get<?>(tuple) 访问数据
tie(v1, v2..) 创建由reference构成的tuple

例子:

  例子1:构造tuple

    tuple<int, float, string> t0;
    tuple<, 2.0, "three");
    auto t2 = make_tuple(, , "asdf", 3.2);
    tuple<, "kaima")); //use pair to init tuple
    auto t4 = t1;
    tuple<, "John");
  

  例子2:访问数据

    tuple<, 2.0, "three");
    cout << >(t1) << >(t1) << >(t1) << endl;

  例子3:关系比较

    tuple<, 2.0, "three");
    tuple<, 1.0, "kaima");

    if(t1 > t2) // >= < <= == !=
        cout << "t1 > t2" << endl;

  例子4:交换值

    swap(t1, t2);
    t1.swap(t2);

  例子5:reference构成的tuple

    string s = "Hello";
    tuple<string&> t1(s);
    >(t1) = "t1";
    cout << s << endl; //t1

    auto t2 = make_tuple(ref(s));
    >(t2) = "t2";
    cout << s << endl; //t2

    auto t3 = tie(s);
    >(t3) = "t3";
    cout << s << endl; //t3

其他:

(1)“接受不定个数的实参”的构造函数被声明为explicit。

(2)元素个数:tuple_size<tupleType>::value

(3)第idx个元素的类型:tuple_element<idx, tupleType>::type

(4)连接tuple:tuple_cat(t1, t2..)

额外:

使用以下代码可以直接cout一个tuple。

template <int IDX, int MAX, typename... Args>
struct PRINT_TUPLE {
    static void print(ostream& strm, const tuple<Args...>& t) {
        strm << ==MAX ? "" : ",");
        PRINT_TUPLE<IDX+, MAX, Args...>::print(strm, t); //recursion
    }
};

//end the recursion
template <int MAX, typename... Args>
struct PRINT_TUPLE<MAX, MAX, Args...> {
    static void print(ostream& strm, const tuple<Args...>& t) {
        //null
    }
};

template <typename... Args>
std::ostream& operator << (ostream& strm, const tuple<Args...>& t) {
    strm << "[";
        PRINT_TUPLE<, sizeof...(Args), Args...>::print(strm, t);
        return strm << "]";
}

C++标准库 -- tuple的更多相关文章

  1. STL标准库-Tuple

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 在前面我介绍过一次tuple,今天在书上也看到了tuple,那就在写一次吧. tuple(元组),他的内部可以放任意类型的变量( ...

  2. C/C++基础----标准库几个工具库tuple,bitset,正则表达式,随机数,IO库

    tuple tuple可以有任意多个成员 默认初始化,值初始化 构造函数是explicit,必须直接初始化 make_tuple(v1,v2,-,vn) get<i> (t) 返回第i个数 ...

  3. Python标准库13 循环器 (itertools)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在循环对象和函数对象中,我们了解了循环器(iterator)的功能.循环器是对象的 ...

  4. 【循序渐进学Python】11.常用标准库

    安装完Python之后,我们也同时获得了强大的Python标准库,通过使用这些标准库可以为我们节省大量的时间.这里是一些常用标准库的简单说明.更多的标准库的说明,可以参考Python文档 sys 模块 ...

  5. Boost程序库完全开发指南——深入C++“准”标准库(第3版)

    内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...

  6. 读书笔记 effective c++ Item 54 让你自己熟悉包括TR1在内的标准库

    1. C++0x的历史渊源 C++标准——也就是定义语言的文档和程序库——在1998被批准.在2003年,一个小的“修复bug”版本被发布.然而标准委员会仍然在继续他们的工作,一个“2.0版本”的C+ ...

  7. python 标准库 -- subprocess

    subprocess 主要功能室执行外部的命令和程序 一个进程可 fork 一个子进程, 并让这个子进程 exec 另外一个程序. 在 python 中, 可以通过标准库中的 subprocess 包 ...

  8. C++相关:部分标准库特殊设施

    C++ tuple(元组) tuple是C++11新标准里的类型.它是一个类似pair类型的模板.pair类型是每个成员变量各自可以是任意类型,但是只能有俩个成员,而tuple与pair不同的是它可以 ...

  9. collections标准库

    collections标准库 之前Python的第三方库用的一直很舒服,现在突然发现标准库也有collections这样的神器,可以补充list.set.dict以外的应用 1. namedtuple ...

随机推荐

  1. GET和POST可传递的值到底有多大?

    前日,看到这个问题了. 没有深入了解.我的常识里面get最大传递的值为256b,post 是2M.这是很久以前不知在哪看到的.于是又百度一下.看到两篇文章装过来看看: 浅谈 HTTP中Get与Post ...

  2. 【ZJOI2013】k大数查询 BZOJ 3110

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  3. 【GoLang】golang 最佳实践汇总

    最佳实践 1 包管理 1.1 使用包管理对Golang项目进行管理,如:godep/vendor等工具 1.2 main/init函数使用,init函数参考python 1.2.1 main-> ...

  4. PHP日期与时间

    时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数.它也被称为 Unix 时间戳(Unix Timestamp).Unix时间戳(Unix timestamp),或称Uni ...

  5. PHP中删除数组空值的方法

    array_filter函数的功能是利用回调函数来对数组进行过滤,如果没有回调函数,那么默认就是删除数组中值为false的项目. 例如 $entry = array(                0 ...

  6. IP地址,子网掩码,默认网关,DNS服务器详解

    为了更深入的学习TCP/IP协议,最近看了不少有关资料,收集整理记录如下,以备后面的使用和方便各位学习: IP地址,子网掩码,默认网关,DNS服务器是什么意思? (一)  问题解析 001.   问: ...

  7. MyBatis学习(四)MyBatis和Spring整合

    MyBatis和Spring整合 思路 1.让spring管理SqlSessionFactory 2.让spring管理mapper对象和dao. 使用spring和mybatis整合开发mapper ...

  8. Nhibernate随手记(1)

    学习Nhibernate的萌芽 今早有群里有人问Nhibernate的问题,没学过,刚好来了兴趣,无意很快在园子里下载到了一本Nhibernate3.0的电子书,内容非常不错,很快地看了扫了一下,再记 ...

  9. Github上安卓榜排名第2的程序员教你如何学习【转载,侵删】

    来自:峰瑞资本(微信号:freesvc)文章作者:代码家(微信 ID:daimajia_share) 软件早已吞噬整个世界,程序员是关键角色.过去 40 年中,许多伟大的公司都由程序员缔造,比如比尔· ...

  10. 我的c++学习(9)指针

    ◆ 1.指针变量的赋值.初始化与简单应用 ,y; y=; // y可以理解成该存储单元的当前名字 int *ip; // ip是一个指针(变量) ip=&y; // ip是存储空间y的地址 c ...