C++标准库 -- tuple

头文件:<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<int, float, string> t1(1, 2.0, "three");
    auto t2 = make_tuple(2, 2, "asdf", 3.2);
    tuple<int, string> t3(make_pair(1, "kaima")); //use pair to init tuple
    auto t4 = t1;
    tuple<int, string> t5 = make_pair(1, "John");
  

  例子2:访问数据

    tuple<int, float, string> t1(1, 2.0, "three");
    cout << get<0>(t1) << " : " << get<1>(t1) << " : " << get<2>(t1) << endl;

  例子3:关系比较

    tuple<int, float, string> t1(1, 2.0, "three");
    tuple<int, float, string> t2(1, 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);
    get<0>(t1) = "t1";
    cout << s << endl; //t1

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

    auto t3 = tie(s);
    get<0>(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 << get<IDX>(t) << (IDX+1==MAX ? "" : ",");
        PRINT_TUPLE<IDX+1, 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<0, sizeof...(Args), Args...>::print(strm, t);
        return strm << "]";
}
时间: 2024-10-12 22:15:01

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

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

tuple tuple可以有任意多个成员 默认初始化,值初始化 构造函数是explicit,必须直接初始化 make_tuple(v1,v2,-,vn) get<i> (t) 返回第i个数据成员的引用,t是左值则返回左值引用,右值则返回右值引用 tuple_size<tupleType>::value 表示成员的数量 tuple_element<i,tupleType>::type 表示给定tuple类型中指定成员的类型 为了使用关系运算符,每对成员使用运算符比较都是合

【python标准库学习】thread,threading(一)多线程的介绍和使用

在单个程序中我们经常用多线程来处理不同的工作,尤其是有的工作需要等,那么我们会新建一个线程去等然后执行某些操作,当做完事后线程退出被回收.当一个程序运行时,就会有一个进程被系统所创建,同时也会有一个线程运行,这个线程就是主线程main,在主线程中所创建的新的线程都是子线程,子线程通常都是做一些辅助的事.python中提供了thread和threading两个模块来支持多线程. python中使用线程有两种方式,第一种是用thread模块的start_new_thread函数,另一种是用threa

Python标准库13 循环器 (itertools)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在循环对象和函数对象中,我们了解了循环器(iterator)的功能.循环器是对象的容器,包含有多个对象.通过调用循环器的next()方法 (__next__()方法,在Python 3.x中),循环器将依次返回一个对象.直到所有的对象遍历穷尽,循环器将举出StopIteration错误. 在for i in iterator结构中,循环器每次返回的对象将赋予给i,直到循环结束.使

第17章 标准库特殊设施

17.1类型tuple tuple是类是pair的模板.每个pair都不相同,但是都有两个成员.而一个tuple类型会有任意数量的成员.(定义在tuple头文件中) tuple<T1,T2,...,Tn> t; t是一个tuple,成员数位n,第i个成员的类型为Ti.所有成员都进行值初始化 tuple<T1,T2,...,Tn> t(v1,v2,...,vn); t是一个tuple,成员类型为T1,T2,...,Tn,每个成员用对应的初始值vi进行初始化.此构造函数是explici

C++ 标准库概览(一分钟就看完了)

C++ 标准库以若干头文件的方式提供. 下面简单介绍一个各头文件的内容. 第一部分 容器 Containers <array> C++11 新增.提供了容器类模板 std::array,固定大小数组的容器. <bitset> 提供了专门用来存放位组(一系列 bit)的容器类 std::bitset. <deque> 提供了双向队列容器类模板 std::deque. <forward_list> C++11 新增.提供了单向链表容器类模板 std::forwa

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

内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Boost 社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理.正则表达式.容器与数据结构.并发编程.函数式编程.泛型编程.设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简捷.优雅.灵活和高效. <Boost程序库完全开发指南——深入C++“准”标准库(

《Python基础教程(第二版)》学习笔记 -&gt; 第十章 充电时刻 之 标准库

SYS sys这个模块让你能够访问与Python解释器联系紧密的变量和函数,下面是一些sys模块中重要的函数和变量: 函数和变量 描述 argv 命令行参数,包括脚本和名称 exit([arg])                退出当前的程序,可选参数为给定的返回值或者错误信息 modules 映射模块名字到载入模块的字典 path 查找模块所在目录的目录名列表 platform 平台标识符 stdin 标准输入流-- 一个类文件对象 stdout 标准输出流-- 一个类文件对象 stderr

Python标准库之collections模块

本文后大家啊分享的主要是python 标准库的collections 模块,一起来看看吧,希望对大家 学习python有所帮助.. 这个模块提供几个非常有用的Python 容器类型 1.容器 2.OrderedDict OrderedDict  类似于正常的词典,只是它记住了元素插入的顺序,当迭代它时,返回它会根据插入的顺序返回. ·  和正常字典相比 , 它是 " 有序 " 的 ( 插入的顺序 ) . from collections import OrderedDict dict1

python标准库之collections

引言 python为我们提供了5种基本的数据结构:list, tuple, dict, set,字符串: 有时候我们需要维护一个有序的dict.所以这个时候我们就要用到Python标准库为我们提供的collections包了,它提供了多个有用的集合类,熟练掌握这些集合类,不仅可以让我们让写出的代码更加pythonic,也可以提高我们程序的运行效率. defaultdict: defaultdict(default_factory)在普通的dict(字典)之上添加了default_factory,