C++11 tuple

tuple元组定义了一个有固定数目元素的容器,其中的每个元素类型都可以不相同,这与其他容器有着本质的区别.是对pair的泛化。

首先来介绍元组的创建和元组元素的访问。通过make_tuple()创建元组,通过get<>()来访问元组的元素。通过下面这段程序来认识这两个函数的用法:

#include <iostream>

#include <tuple>

#include <functional>

int main()

{

auto t1 = std::make_tuple(10, "Test", 3.14);

std::cout << "The value of t1 is "

<< "(" << std::get<0>(t1) << ", " << std::get<1>(t1)

<< ", " << std::get<2>(t1) << ")\n";

int n = 1;

auto t2 = std::make_tuple(std::ref(n), n);//ref表示引用

n = 7;

std::cout << "The value of t2 is "

<< "(" << std::get<0>(t2) << ", " << std::get<1>(t2) << ")\n";

}

运行结果为:

The value of t1 is (10, Test, 3.14)

The value of t2 is (7, 1)

接下来介绍tie()函数。 tie()函数可以将变量连接到一个给定的tuple上,生成一个元素类型全是引用的tuple,相当于make_tuple(ref(a),ref(b),…)。可以通过tie()函数的使用方便的对tuple进行“解包”操作。看下面的代码:

#include <iostream>

#include <tuple>

int main ()

{

int myint;

char mychar;

float myfloat;

std::tuple<int,float,char> mytuple;

mytuple = std::make_tuple (10, 2.6, ‘a‘);          // packing values into tuple

//std::tie (myint, std::ignore, mychar) = mytuple;   // unpacking tuple into variables  【1】

std::tie (myint,myfloat, mychar) = mytuple;

std::cout << "myint contains: " << myint << std::endl;

std::cout << "mychar contains: " << mychar << std::endl;

std::cout << "myfloat contains: "<< myfloat <<std::endl;

std::get<0>(mytuple) = 100;//修改tuple的值

std::cout <<"After assignment myint contains: "<< std::get<0>(mytuple) << std::endl;

return 0;

}

运行结果:

myint contains: 10

mychar contains: a

myfloat contains: 2.6

After assignment myint contains: 100

注:正如【1】处我们可以使用std::ignore,从而不用关联tuple中的第二个元素.

最后介绍一个tuple_cat()函数,通过该函数可以将多个tuple连接起来形成一个tuple(注:在VC11中只能连接两个tuple并不是真正的多个tuple)。

#include <iostream>

#include <utility>

#include <string>

#include <tuple>

int main ()

{

std::tuple<float,std::string> mytuple (3.14,"pi");

std::pair<int,char> mypair (10,‘a‘);

auto myauto = std::tuple_cat ( mytuple, mypair );

std::cout << "myauto contains: " << std::endl;

std::cout << std::get<0>(myauto) << std::endl;

std::cout << std::get<1>(myauto) << std::endl;

std::cout << std::get<2>(myauto) << std::endl;

std::cout << std::get<3>(myauto) << std::endl;

return 0;

}

运行结果:

myauto contains:

3.14

pi

10

a

时间: 2024-10-12 22:42:50

C++11 tuple的相关文章

C++11 tuple元组

C++11 tuple 元组 tuple容器(元组), 是表示元组容器, 是不包含任何结构的,快速而低质(粗制滥造, quick and dirty)的, 可以用于函数返回多个返回值; tuple容器, 可以使用直接初始化, 和"make_tuple()"初始化, 访问元素使用"get<>()"方法, 注意get里面的位置信息, 必须是常量表达式(const expression); 可以通过"std::tuple_size<declty

c++11——tuple元组

tuple是一个固定大小的不同类型值的集合,是泛化的 std::pair.可以当做一通用的结构体使用,不需要创建结构体而又获取结构体的特征,在某些情况下可以取代结构体,使程序简洁.直观. 创建tuple 1. make_tupe tuple<const char*, int> tp = make_tuple(sendPack, nSendSize);//构造tuple 2. tie 函数(创建一个元组的左值引用) auto tp = std::tie(1, "aa", 2.

C++11 —— tuple 参数列表解包

??tuple 的主要用途,就是把各种类型的参数组合成一个新的数据关联体(结构体),相当于早期的 std::pair 的泛化版本. ??组合存储是方便了,但是,对于某些特定的应用场景,解包就成了个比较麻烦的事情.为此,我查看 gcc 8.2.0 版的 STL 源码,从 functional 文件中 提取出 tuple 索引号生成的代码,并略作更名(避免冲突),得到如下 nstuple 命名空间内的代码,这其中可变参数模板类的递归构建,用得甚是精妙,值得学习. namespace nstuple

格式工厂(五) tuple

版权声明:本文为博主原创文章,未经博主允许不得转载. tuple 是一个可以装载任何变量的容器,C++11的Variadic Templates给tuple的实现带来了极大方便. tuple的实现基于递归继承,例如 std::tuple<int, float, string> t (41,6.3,"nico"); 结构图如下图 递归继承的优点是,将内存分配在连续片段上,这是在内存管理上非常好的做法 下面来介绍一下tuple的使用 std::tuple<int, flo

C++可变参数模板实现输出

C++11 tuple&可变参数模板 1 template 2 3 void Print(T value) 4 5 { 6 7 std::cout << value << std::endl; 8 9 } 10 11 template 12 13 void Print(Head head, Rail... rail) 14 15 { 16 17 std::cout << head << ", "; 18 19 Print(rail

Log Processing With Storm

有代码的书籍看起来就是爽,看完顺便跑个demo,感觉很爽! 场景分析 主要是利用apache的访问日志来进行分析统计 如用户的IP来源,来自哪个国家或地区,用户使用的Os,浏览器等信息,以及像搜索的热词等信息的统计 这里日志信息如下 24.25.135.19 - - [1-01-2011:06:20:31 -0500] "GET / HTTP/1.1" 200 864 "http://www.adeveloper.com/resource.html" "M

第一课 Scala入门与实战笔记总结

第一课:Scala入门 1:Scala的重大价值 2:Scala基础函数入门实战 3:Scala函数入门实战 4:Scala中的Array,Map,Tuple实战 5:综合案例及Spark源码解析 Scala与Java的关系: 一:它们都是基于JVM的,但Scala可以调用Java的任何功能,比如Spark运行在Hadoop上,它可以调用Hadoop上的一切功能. 二:你可以认为Scala它是一个升级版的Java,因为Scala它本身是一门支持面向对象的语言,在Scala中,一切皆对象,它是一门

简述Python语言的元组序列结构

序列是程序设计中经常用到的数据存储方式,几乎每一种程序设计语言都提供了表格数据结构,如C和Basic中的一维.多维数组等.Python语言提供的序列类型在所有程序设计语言中是最丰富,最灵活,也是功能最强大的. 序列是一系列连续值,它们通常是相关的,并且按一定顺序排列.Python中常用的序列结构有列表.元组等. 元组和列表类似,但属于不可变序列,元组一旦创建,用任何方法都不可以修改其元素. 元组的定义方式和列表相同,但定义时所有元素是放在一对圆括号"("和")"中,

Kth Smallest Element in a Sorted Matrix -- LeetCode

Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth smallest element in the matrix. Note that it is the kth smallest element in the sorted order, not the kth distinct element. Example: matrix = [ [ 1, 5