std::tuple如何实现比较?

年轻人喜欢使用新技术,而且代码里到处都是,为了程序的稳定性,还是需要深入研究std::tuple后,方可大胆使用。

内存分布如何?

测试代码:

auto t = std::make_tuple(0x9,0x1,std::string("abcdefjjj"),0x10, 0x123);

t 的内存如下:


仔细看,很容易发现数据的规则,但是为什么到第3块数据"abcdefjjj"就变的这么怪?其实不让,这就是string的结构而已。模版用多了,看代码想套上内存数据,估计只有汇编后才能流畅的看明白。

在tuple里,每个_Cons_node包含
_Value_type _Value;
_Tail_type _Tail;


如何比较大小?

简单点吧,代码如下:

template<class _Car1,

class _Cdr1>
bool _Lt(const _Cons_node<_Car1, _Cdr1>& _Right) const
{ // return true if *this < _Right
return (_Value < _Right._Value ? true
: _Right._Value < _Value ? false
: _Tail._Lt(_Right._Tail));

}

根据不同的类型,会生成多份不同的2进制码,然后根据不同的类型进行比较。在自定义的结构里,需要注意实现:

operator==,!=,<,<=,>,>=

别让悲剧发生!!!!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值