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. sharpsvn 继续,解决文件locked 问题,

    方法中少个方法就会出现一些问题. 比如进行了断线测试,结果再操作时就出现了文件被锁的情况,最终查了官网的论坛,才得以解决 How to unlock if the working copy is lo ...

  2. istio分布式调用链Jaeger

    1.安装 kubectl apply -n istio-system -f https://raw.githubusercontent.com/jaegertracing/jaeger-kuberne ...

  3. (转)system.badimageformatexception 未能加载文件或程序集

    “/xxxxx”应用程序中的服务器错误. ------------------------------------------------------------------------------- ...

  4. SSH原理与运用(一):远程登录(转)

      作者: 阮一峰 日期: 2011年12月21日 SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很 ...

  5. Games.RecordMobileGamePlayVideo

    1. kamcord https://github.com/kamcord/ 2. Sound Stage & iSimulate http://blog.tacograveyard.com/ ...

  6. 修改别人写的Hibernate数据库操作代码

    最近正在维护别人写的一个关于Hibernate操作数据库的项目,在运行测试的时候(向表中插入记录),报了一个错误:cannot insert a null into column(XXX字段名,下文统 ...

  7. EXISTS 和 IN 的区别

    exists子句的用法 select * from 表1 where exists (select * from 表2 where 表1.列名=表2.列名); exists子句返回的结果并不是从数据库 ...

  8. Python之路(第六篇)Python全局变量与局部变量、函数多层嵌套、函数递归

    一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序. 全局变量没有任何缩进,在任何位置都可 ...

  9. robotframework 常用关键字

    标准库 第三方库 其他库

  10. 把dataset对象转换成list集合方法

    public static List<T> GetList<T>(DataTable table) where T:new() { List<T> list = n ...