c++11 tuple元组

概述

tuple也是一个类模板,其最大的特点就是: 可以存储任意多种类型和任意数量的数据。
 

所以tuple的使用场景很多:  
所以,当我们需要存放多个不同类型的数据的时候,可以使用tuple函数如果要返回多个不同类型的时候,也可以使用tuple

使用tuple需要导入头文件#include <tuple>

 

1. 创建tuple对象 

 

  • std::tuple<std::string, int> t;
    std::tuple<std::string, int> t1("张三",1);
    std::tuple<std::string, int> t2(t1);
    std::tuple<std::string, int> t3({"张三",15});
    std::tuple<int, int, int> t4();
    std::tuple<int, int, int> t5(std::tuple<int,int,int>(1,2,3));    // 调用移动构造函数
  • 使用make_tuple创建
    auto t4 = std::make_tuple("张三",15);
    auto t5 = std::make_tuple(t3);

    int a = 10; int b[] = { 0 };
    auto t6 = std::make_tuple(a,b);   // 存放的是int和int*类型的数据
  • 使用pair初始化
    auto p1 = std::make_pair<std::string, int>("李四",15);
    std::tuple<std::string, int> t6(p1);
    auto t7 = std::make_tuple(p1);

使用pair需要导入头文件#include <utility>,pair和tuple类似,只是pair最多只能存储两个类型的数据。

 

2. tuple中的函数 

表 tuple 对象常用函数
函数或类模板描 述
tup1.swap(tup2)
swap(tup1, tup2)
tup1 和 tup2 表示类型相同的两个 tuple 对象,tuple 模板类中定义有一个 swap() 成员函数,<tuple> 头文件还提供了一个同名的 swap() 全局函数。

swap() 函数的功能是交换两个 tuple 对象存储的内容。
get<num>(tup)tup 表示某个 tuple 对象,num 是一个整数,get() 是 <tuple> 头文件提供的全局函数,功能是返回 tup 对象中第 num+1 个元素。
tuple_size<type>::valuetuple_size 是定义在 <tuple> 头文件的类模板,它只有一个成员变量 value,功能是获取某个 tuple 对象中元素的个数,type 为该tuple 对象的类型。
tuple_element<I, type>::typetuple_element 是定义在 <tuple> 头文件的类模板,它只有一个成员变量 type,功能是获取某个 tuple 对象第 I+1 个元素的类型。
forward_as_tuple<args...>args... 表示 tuple 对象存储的多个元素,该函数的功能是创建一个 tuple 对象,内部存储的 args... 元素都是右值引用形式的。
tie(args...) = tuptup 表示某个 tuple 对象,tie() 是 <tuple> 头文件提供的,功能是将 tup 内存储的元素逐一赋值给 args... 指定的左值变量。
tuple_cat(args...)args... 表示多个 tuple 对象,该函数是 <tuple> 头文件提供的,功能是创建一个 tuple 对象,此对象包含 args... 指定的所有 tuple 对象内的元素。

 

#include <iostream>
#include <tuple>
#include <string>
#include <utility>

int main(void) {
	auto t1 = std::make_tuple(1,2,3);
	auto t2 = std::make_tuple(2, 3, 4);
	auto t3 = std::make_tuple(1,"张三");

	int length = std::tuple_size<std::tuple<int,int,int>>::value;      // 获取元素个数
	std::cout << length << std::endl;

	std::cout << std::get<0>(t1) << std::endl;                // 获取t1的第一个元素
	std::cout << std::get<1>(t1) << std::endl;                // 获取t1的第二个元素

	int nub;
	const char* string = nullptr;
	std::tie(nub, string) = t3;                               // 将t3的值拆解成分别赋值给nub和string

	std::cout << nub << std::endl;							  // 获取t1的第一个元素
	std::cout << string << std::endl;

	auto tuple1 = std::tuple_cat(t1,t3);                      // 将元组t1和t2中的元素组合构建新的元素
	length = std::tuple_size<decltype(tuple1)>::value;        // 获取tuple1的元素个数
	std::cout << length << std::endl;

	std::cin.get();
	return 0;
}

 

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值