tuple 库

  tuple 库 是能够将不同类型的对象组合起来形成一个对象。和pair 对象一样,但是可以组织多种不同类型的元素。

  tuple中的元素类型是在编译时期决定的。与<utility>中的pair 类密切相关, pair对象可以视为tuple类型对待。

  头文件: <tuple>,

1. tuple 类

  原型:  template <class... Types> class tuple;

  tuple对象可以组合不同元素, 每个元素的类型可以不同;

2. 成员函数

(constructor)

(1)默认构造函数,

  构造tuple对象用元素初始值;

(2)copy/move 构造函数

  通过另一个tuple对象来构造tuple对象

(3)隐式转换构造函数;

(4)初始自定义构造函数;

(5)pair 转化 构造函数

示例:

// tuple constructors
#include <iostream> // std::cout
#include <utility> // std::make_pair
#include <tuple> // std::tuple, std::make_tuple, std::get int main ()
{
std::tuple<int,char> first; // default
std::tuple<int,char> second (first); // copy
std::tuple<int,char> third (std::make_tuple(,'b')); // move
std::tuple<long,char> fourth (third); // implicit conversion
std::tuple<int,char> fifth (,'a'); // initialization
std::tuple<int,char> sixth (std::make_pair(,'c')); // from pair / move std::cout << "sixth contains: " << std::get<>(sixth);
std::cout << " and " << std::get<>(sixth) << '\n'; return ;
}

operator= 赋值函数

tuple:: swap 函数

void swap (tuple& tpl)

  交换参数中的每个元素值。

3. Non-member function overloads

(1)逻辑比较

  顺序比较两个不同的元素,指导发面不同,即作为结果。返回bool值。

(2) std::swap(a,b);

(3) std::get<i>(mytuple)

  返回tuple 对象中的第i个元素的引用。

  get同样用于tuple类似的类型,如pair, array等。

  注意, 模板参数i来决定获取的索引位置,且必须是constexpr,即编译器为const value

  返回参会参数是: tuple_element<i, tuple<type1, type2,...>>:: type 是 type对象中第i个元素的类型。

4. Helper classes

(1)std::tuple_size<T>类

  用来获取tuple 对象中的元素数量的类模板。

  模板参数T ,用于访问的tuple对象的类型。 即一个已经存在的类的声明。

  类成员变量:value, 即类型T中的元素数量。

/ tuple_size
#include <iostream> // std::cout
#include <tuple> // std::tuple, std::tuple_size int main ()
{
std::tuple<int,char,double> mytuple (,'a',3.14); std::cout << "mytuple has ";
std::cout << std::tuple_size<decltype(mytuple)>::value;
std::cout << " elements." << '\n'; return ;
}

(2)std::tuple_element<>类

  被设计用来访问tuple对象中第i个元素类型的类。

  具有成员类型 type, 即通过std::get<i>(tuple)访问第i个元素的类型。

#include <iostream>     // std::cout
#include <tuple> // std::tuple, std::make_tuple, std::tuple_element, std::get int main ()
{
auto mytuple = std::make_tuple (,'a'); std::tuple_element<,decltype(mytuple)>::type first = std::get<>(mytuple);
std::tuple_element<,decltype(mytuple)>::type second = std::get<>(mytuple); std::cout << "mytuple contains: " << first << " and " << second << '\n'; return ;
}

5.Functions

生成对象:

  std::make_tuple<class... Types>

  构建一个合适tuple类型的对象,并包含执行元素类型的参数。

  函数返回的类型tuple<type,,,> 是在函数模板中定义的参数。

  函数通过call tuple的初始构造函数。

// make_tuple example
#include <iostream>
#include <tuple>
#include <functional> int main()
{
auto first = std::make_tuple (,'a'); // tuple < int, char > const int a = ; int b[]; // decayed types:
auto second = std::make_tuple (a,b); // tuple < int, int* > auto third = std::make_tuple (std::ref(a),"abc"); // tuple < const int&, const char* > std::cout << "third contains: " << std::get<>(third);
std::cout << " and " << std::get<>(third);
std::cout << std::endl; return ;
}

endl;

STL其他--<tuple>用法【C11】的更多相关文章

  1. C++中的STL中map用法详解(转)

    原文地址: https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html C++中的STL中map用法详解   Map是STL的一个关联容器,它提供 ...

  2. STL的其他用法(adjacent_find, find_first_of, sort_heap, merge, binary_search)总结

    2017-08-20 17:26:07 writer:pprp 1.adjacent_find() 下面是源码实现: template <class ForwardIterator> Fo ...

  3. C++-STL:vector用法总结

    目录 简介 用法 1. 头文件 2. vector的声明及初始化 3. vector基本操作 简介 vector,是同一类型的对象的集合,这一集合可看作可变大小的数组,是顺序容器的一种.相比于数组,应 ...

  4. STL中map用法

    Map是 STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于 这个特性,它完成有可能在我们处理一对一数据的 ...

  5. [STL] SET实用用法

    背景 今天考试深受平衡树之害,可以参见上一篇博客,想到了set却苦于实用的不熟练.同时QTY询问set的具体用法,所以写这篇博客,同时留作自用. 分类 参看了一下网上其他set博客,上来都是长篇大论概 ...

  6. C++中的STL中map用法详解

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时 ...

  7. C++ STL sort()函数用法

    C++STL提供的在里的排序函数,有以下两种形式 此外还提供有稳定排序版本stable_sort(),用法类似. 第一种形式: template <class RandomAccessItera ...

  8. (转载) STL中map用法详解

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  9. STL的常用用法、函数汇总(不定时更新)

    隶书文字为原创. 1.vector 在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vec ...

随机推荐

  1. JAVA动手动脑及课后作业

    1.查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? 运行结果 true true false 原因 1)在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0, ...

  2. python添加fluent日志记录-aop

    python添加fluent日志,aop实现 1.配置fluent相关信息 fluent_config.ini fluent_config.ini [fluent.aop] #is support f ...

  3. hdu 2066 ( 最短路) Floyd & Dijkstra & Spfa

    http://acm.hdu.edu.cn/showproblem.php?pid=2066 今天复习了一下最短路和最小生成树,发现居然闹了个大笑话-----我居然一直写的是Floyd,但我自己一直以 ...

  4. hdu 5326(基础题) work

    http://acm.hdu.edu.cn/showproblem.php?pid=5326 一道水题,题目大意是在公司里,给出n个员工和目标人数m,然后下面的n-1行是表示员工a管理b,问在这些员工 ...

  5. Scrapy框架学习笔记

    1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网 ...

  6. ASC与HEX之间的转换

    ASC与HEX之间的转换 有这么两个函数: 函数 原型 功能 返回值 参数 备注 hex2asc __int16 hex2asc(unsigned char *strhex,unsigned char ...

  7. socket 长连接

    实现: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的. 如果,长时间未发送维持连接包,服务端程序将断开连接. 服务端: 由于客户端会定时(keepAliveDelay毫秒)发送 ...

  8. Maximum Size Subarray Sum Equals k LT325

    Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...

  9. 利用PHP脚本辅助MySQL数据库管理1-表结构

    <?php $dbi = new DbMysql; $dbi->dbh = 'mysql://root:mysql@127.0.0.1/coffeetest'; $map = array( ...

  10. App上架流程[利用Archive进行上传]

    作者 M_Lee2016.01.22 10:47 写了14852字,被32人关注,获得了49个喜欢 [iOS]App上架流程[利用Archive进行上传] 字数2186 阅读507 评论3 喜欢9 今 ...