暂时在heap上留个坑

在写smart_heap的时候,其中函数首先要将迭代器的difference_type和value_type萃取出来,但是为什么要萃取出value_type,他是这么用的(下面代码是我自己写的,大致是这个意思):

    template<class RandomAccessIterator, class Distance, class T>
    void make_heap_aux(RandomAccessIterator first, RandomAccessIterator last, Distance*, T*)
    {
        if(last - first < 2)        //只有一个元素,不需要make heap
            return;
        //len表示vector中最后一个元素的下标
        Distance len = last - first - 1;
        //左后一个也节点对应的父节点即是这个树中的最后一个非叶子节点
        Distance parrent = (len - 1)/2;
        while (parrent >= 0)
        {
            //我对这个问题不是很清楚,准备看一下《C++ Template》看看是否有相关解释
            _pop_heap(first, len, parrent, T(*(first + parrent)));
            parrent--;
        }
    }

就是在_pop_heap调用函数那里,T((first+parrent))这里,为什么非要将这个重载返回的东西强制转换成T类型的呢?我还不太明白,是不是因为operator*返回的是reference类型的,然后无法准确调用这个_pop_heap了呢?
暂时留个坑,明后天来解答。
//———————-2015/7/15下午分割线————————————-
现在我知道肯定不是我上午的原因,因为*operator只是返回了T&引用,这个本体还是T类型的,那么它就是可以调用_pop_heap这个函数,看来这个坑要等一等了。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值