概述
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中的函数
函数或类模板 | 描 述 |
---|---|
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>::value | tuple_size 是定义在 <tuple> 头文件的类模板,它只有一个成员变量 value,功能是获取某个 tuple 对象中元素的个数,type 为该tuple 对象的类型。 |
tuple_element<I, type>::type | tuple_element 是定义在 <tuple> 头文件的类模板,它只有一个成员变量 type,功能是获取某个 tuple 对象第 I+1 个元素的类型。 |
forward_as_tuple<args...> | args... 表示 tuple 对象存储的多个元素,该函数的功能是创建一个 tuple 对象,内部存储的 args... 元素都是右值引用形式的。 |
tie(args...) = tup | tup 表示某个 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;
}