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. get(0).tagName获得作用标签

    <script type="text/javascript" src="jquery1.4.js"></script><scrip ...

  2. 安装SQL Server 2008,一直要求重启电脑的解决办法

    1.运行注册表,cmd->regedit 2.然后找到 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager 在 ...

  3. 基于spring boot的统一异常处理

    一.springboot的默认异常处理 Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容. 例如这里我 ...

  4. Thread中join()方法进行介绍

    http://www.cnblogs.com/skywang12345/p/3479275.html https://blog.csdn.net/dabing69221/article/details ...

  5. 在HashTable上下文中,同步指的是什么?

    同步意味着在一个时间点只能有一个线程可以修改hash表,任何线程在执行HashTable的更新操作前都需要获取对象锁,其他线程需要等带锁的释放.

  6. oracle使用3DES加密

    CREATE OR REPLACE PACKAGE dbc_cryptor IS SYSKEY VARCHAR2(16) := '0000000012345678'; SYSIV VARCHAR2(1 ...

  7. MMS从Contacts中添加收件人显示email账号

    android系统默认代码,MMS中可以添加email地址作为收件人,但是从Contacts中选择收件人时却不显示email. 解决思路:为了降低修改量,在原来只搜索phoneNum的基础上,再做一次 ...

  8. Java类加载机制及自定义加载器

    转载:https://www.cnblogs.com/gdpuzxs/p/7044963.html Java类加载机制及自定义加载器 一:ClassLoader类加载器,主要的作用是将class文件加 ...

  9. TensorFlow安装时错误CondaValueError: prefix already exists: G:\softs\Anaconda\envs\tensorflow

    TensorFlow安装时,TensorFlow环境已经调好了,就是下面的第(3)步, 可我自己偏偏选了个Python3.7,因为检测到自己的Python最新版本为3.7,就手贱安了TensorFlo ...

  10. CSS-弹性布局-伪类选择器-复杂选择器

    1.定位 1.堆叠顺序 一旦将元素变为已定位元素的话,元素们则有可能出现堆叠的效果. 如何改变堆叠顺序? 属性:z-index 取值:无单位的数字,数字越大越靠上. 注意: 1.父子元素间,z-ind ...