通用工具(2)---Tuple

Tuple作为pair的扩展,可以拥有任意数量的元素

tuple的操作

tuple也是能默认构造,拷贝构造,赋值,比较等,他们都支持隐式转换,使用make_tuple,其所有元素类型都是通过自动推导获得类型。使用get时候不允许运行期才传入索引值。

tuple<int,string,double> p(15,"test",15.0);
auto p2=make_tuple(15,"test",15.0);
get<0>(p) = get<0>(p2);//copy
if(p==p2)//比较

tuple元素的引用

tuple的元素允许使用引用类型,使用reference_wrapper<>函数对象和ref()(引用类型)和cref()(const 引用)函数,可以影响make_pair产生的类型。

std::string s;
auto x=std::make_tuple(s);
std::get<0>(x)="test";
auto x=std::make_tuple(ref(s));
std::get<0>(x)="test";

还能将tuple的值提取出来

std::tuple<int,string,double> p(15,"test",15.0);
int a;
string b;
double c;
std::make_tuple(ref(a),ref(b),ref(c))=p;

也可以使用tie()和std::ignore

std::tuple<int,string,double> p(15,"test",15.0);
int a;
string b;
std::tie(a,b,std::ignore)=p;

tuple和初值列

为了避免一个单一元素被转换为带着一个元素的tuple,所以在tuple中使用初值列是不允许隐式转换的。如果你尝试将一个初值列赋值或者返回值给tuple(将初值列传入一个期望获得tuple的地方)将会报错

std::tuple<int,string,double> p{15,"test",15.0};//ok
std::tuple<int,string,double> p2={15,"test",15.0}//error
std::vector<std::tuple<int,int>> v{{10,20},{30,40}};//error
std::vector<std::tuple<int,int>> v{make_tuple(10,20),make_tuple(30,40)};

tuple其他特性

std::tuple_size<p>::value//获得tuple元素的个数
std::tuple_element<0,p>::type//获得p的第一个元素的类型
auto t=std::tuple_cat(p,p2);//将tuple p和p2串接成新的tuple t
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

工农村贴膜小哥

我倒是要看看是那个憨憨在给我打

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

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

打赏作者

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

抵扣说明:

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

余额充值