暂时在heap上留个坑

来源:互联网 发布:java数据库编程题型 编辑:程序博客网 时间:2024/05/17 00:54

在写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
原创粉丝点击