c++中的tuple元组怎么用_c++ std::tuple创建与访问【C++11】

1次阅读

std::tuple是c++11引入的编译期类型安全、零开销异构元组;支持make_tuple构造、get或结构化绑定访问、tuple_size_v和tuple_element_t获取元信息,常用于多返回值、map键、模板元编程等场景。

c++中的tuple元组怎么用_c++ std::tuple创建与访问【C++11】

std::tuple 是 C++11 引入的轻量级固定大小异构容器,用来打包多个类型不同的值,类似 python 的元组,但编译期类型安全、零运行时开销。

创建 tuple:用 make_tuple 或直接构造

推荐用 std::make_tuple,它自动推导类型,写法简洁:

auto t1 = std::make_tuple(42, 3.14, std::String("hello")); // int, double, string

也可以显式指定类型并构造:

std::tuple<int, double, std::string> t2(100, 2.718, "world");

注意:空 tuple 也合法:std::tuple t3;

立即学习C++免费学习笔记(深入)”;

访问元素:用 get(t) 或结构化绑定(C++17 起)

传统方式是通过 std::get(tuple) 获取,索引从 0 开始,编译期检查:

c++中的tuple元组怎么用_c++ std::tuple创建与访问【C++11】

Motiff

Motiff是由猿辅导旗下的一款界面设计工具,定位为“AI时代设计工具”

c++中的tuple元组怎么用_c++ std::tuple创建与访问【C++11】 126

查看详情 c++中的tuple元组怎么用_c++ std::tuple创建与访问【C++11】

  • int a = std::get(t1); // 得到 42
  • double b = std::get(t1); // 得到 3.14
  • std::string s = std::get(t1); // 得到 “hello”

C++17 支持更直观的 结构化绑定

auto [x, y, z] = t1; // x:int, y:double, z:string —— 类型自动推导,顺序严格对应

绑定变量名可任意,但数量和顺序必须匹配 tuple 元素个数。

获取大小与类型信息

tuple 的长度在编译期确定,用 std::tuple_size_v(C++17)或 std::tuple_size<t>::value</t>

static_assert(std::tuple_size_v<decltype(t1)> == 3);

获取某位置元素的类型,用 std::tuple_element_t

static_assert(std::is_same_v<std::tuple_element_t<1, decltype(t1)>, double>);

常见实用场景

  • 函数多返回值:替代结构体输出参数,例如 return std::make_tuple(result, status, count);
  • 作为 map 的 key:支持字典序比较,如 std::map<:tuple std::string>, double> m;</:tuple>
  • 模板元编程辅助:配合 std::apply 拆包调用可变参数函数
  • 临时聚合数据:比写 Struct 更快,尤其在 Lambda算法内部短生命周期使用

基本上就这些。tuple 不复杂但容易忽略细节——类型严格、索引编译期检查、不可动态增删,用对了很干净利落。

text=ZqhQzanResources