CPP11特性之tuple

在 C++11 中引入了 std::tuple 类模板,它是一个通用的元组(Tuple)类,用于存储多个不同类型的值。std::tuple 可以看作是一个固定大小的、类型安全的、不可修改的集合。

使用 std::tuple 可以方便地组合多个值,而无需定义新的结构体或类。下面是一个简单的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <tuple>

int main() {
// 创建一个包含 int、double 和字符串的 tuple
std::tuple<int, double, std::string> myTuple(42, 3.14, "Hello");

// 使用 std::get 访问 tuple 中的元素(通过索引)
int intValue = std::get<0>(myTuple);
double doubleValue = std::get<1>(myTuple);
std::string stringValue = std::get<2>(myTuple);

std::cout << "int value: " << intValue << std::endl;
std::cout << "double value: " << doubleValue << std::endl;
std::cout << "string value: " << stringValue << std::endl;

return 0;
}

除了使用 std::get 函数,还可以使用结构化绑定(Structured Binding)来解包元组中的值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <tuple>

int main() {
std::tuple<int, double, std::string> myTuple(42, 3.14, "Hello");

// 结构化绑定解包 tuple 中的值
auto [intValue, doubleValue, stringValue] = myTuple;

std::cout << "int value: " << intValue << std::endl;
std::cout << "double value: " << doubleValue << std::endl;
std::cout << "string value: " << stringValue << std::endl;

return 0;
}