STL源碼剖析之算法:make_heap

  1. template <class RandomAccessIterator>                                             
  2. inline void make_heap(RandomAccessIterator first, RandomAccessIterator last) {    
  3.     __make_heap(first, last, value_type(first), distance_type(first));            
  1. template <class RandomAccessIterator, class T, class Distance>                    
  2. void __make_heap(RandomAccessIterator first, RandomAccessIterator last,
  3.                  T*, Distance*) {                                                 
  4.     if(last - first < 2) return;                                                  
  5.     Distance len = last - first;                                                  
  6.     Distance parent = (len - 2)/2;                                                
  7.                                                                                   
  8.     while(true) {                                                                 
  9.         __adjust_heap(first, parent, len, T(*(first + parent)));                  
  10.         if(parent == 0) return;                                                   
  11.         --parent;                                                                 
  12.     }                                                                             
  13. }                                                                   

注:__adjust_heap源碼請見http://zxn990.blog.51cto.com/4253193/1165524

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章