tuple元组

C++11 引入了 std::tuple,它是一种可以包含多个不同类型元素的容器( 它是一个模板类,允许将多个不同类型的对象组合在一起。)。std::tuple 提供了一种方便的方法来将多个值组合在一起,而不需要定义一个结构体或类。

1
std::tuple<int, double, std::string> myTuple(1, 2.5, "Hello");

创建和初始化

1
2
3
std::tuple<int, double, std::string> t1;  // 默认构造
std::tuple<int, double, std::string> t2(10, 3.14, "C++"); // 值构造
auto t3 = std::make_tuple(20, 6.28, "Programming"); // 使用 make_tuple 创建

访问元素

1
2
3
4
5
6
7
auto t = std::make_tuple(1, 2.5, "Hello");
int i = std::get<0>(t); // 获取第一个元素,类型为 int
double d = std::get<1>(t); // 获取第二个元素,类型为 double
std::string s = std::get<2>(t); // 获取第三个元素,类型为 std::string

// 通过类型访问元素
auto s1 = std::get<std::string>(t);

std::tuple_size 和 std::tuple_element

std::tuple_size<tuple_type>::value 用于获取 tuple 中的元素数量。

std::tuple_element<N, tuple_type>::type 用于获取 tuple 中第 N 个元素的类型。

1
2
3
4
auto t = std::make_tuple(1, 2.5, "Hello");
constexpr auto size = std::tuple_size<decltype(t)>::value; // size = 3

using ElementType = std::tuple_element<1, decltype(t)>::type; // ElementType = double

应用场景

返回多个值:在函数需要返回多个值时,std::tuple 是一个很好的选择。

可变参数模板:在泛型编程中,可以使用 std::tuple 处理不同数量和类型的参数

组合复杂类型:将多个不同类型的数据组合在一起,避免定义专门的结构体