欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > C++-标准库 tuple

C++-标准库 tuple

2025/2/23 7:35:24 来源:https://blog.csdn.net/mrbone11/article/details/141144771  浏览:    关键词:C++-标准库 tuple

文章目录

  • 概述
  • 使用

概述

tuple表示一个不定数量的值的组合,即一个异质元素列,每个值的类型都要求被指定或者可以编译期推导。

使用

// 构造
tuple<int, float, string> t1(1, 2.3, "hello");
tuple<int, int, string> t2;
auto t3 = make_tuple(3, 4, "world");
// 赋值
// t1的第二个值赋值到t2
get<1>(t2) = get<1>(t1);
// 比较
// 类型tuple<int, int, const char*>将转化为tuple<int, float, string>以后进行比较
if (t1 < t2)t1 = t2;

tuple不是寻常的容器,它不允许迭代元素,你必须在编译器知道你打算处理的元素的索引值

int i;
get<i>(t1); // 错误

make_tuple搭配ref()函数可以提取tuple的值,其定义在<functional>头文件中

tuple<int, float, string> t(1, 2.2, "hello");
int i;
float f;
string s;
make_tuple<ref(i), ref(f), ref(s)> = t;

make_tuple生成的tuple具有三个引用,分别指向i, f, s,赋值操作将t的三个元素分别赋值给i, f, s,一种更简便的写法是使用tie(),它会建立一个由reference构成的tuple

tie(i, f, s) = t;

std::ignore允许我们忽略某些tuple元素,从而局部提取tuple元素值

tie(i, std::ignore, s);

在tuple的构造函数中,接受不定参数的实参的版本被声明为explicit,这意味着不定参数的tuple必须被显式构造,因此以下写法是错误的:

tuple<int, double> t = {1, 2.2}; // 使用赋值符,发生隐式构造
vector<tuple<int, float>> v{{1, 2.2}, {2, 3.3}}; // 将初值列传至一个期望获得tuple的地方
tuple<int, double> f() {return {1, 2.2}; // 将初值列传至一个期望获得tuple的地方
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词