在写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这个函数,看来这个坑要等一等了。。