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的地方
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mrbone11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值