• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ACM___________________________

            ______________白白の屋
            posts - 182, comments - 102, trackbacks - 0, articles - 0
            <2011年5月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            常用鏈接

            留言簿(24)

            隨筆分類(332)

            隨筆檔案(182)

            FRIENDS

            搜索

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            MiYu原創(chuàng), 轉(zhuǎn)帖請注明 : 轉(zhuǎn)載自 ______________白白の屋    

             

            C ++  STL 中與heap 有關(guān)的操作有 如下幾個 :

             

            make_heap(),   pop_heap(),  push_heap(),  sort_heap(),  is_heap; 

             

            is_heap() :

             

            原型如下 :

                 1. bool is_heap(iterator start, iterator end); 

               ->判斷迭代器[start, end] 區(qū)間類的元素是否構(gòu)成一個堆.  是返回true ,否則返回 false.

            2. bool is_heap(iterator start, iterator end, StrictWeakOrdering cmp); 

                ->判斷迭代器[start, end] 區(qū)間類的元素在cmp條件下是否構(gòu)成一個堆. 是返回true ,否則返回 false.

             

            make_heap() :

             

             原型如下 :

            1. void make_heap( random_access_iterator start, random_access_iterator end );

            2. void make_heap( random_access_iterator start, random_access_iterator end, StrictWeakOrdering cmp ); 

              ->以 迭代器[start , end] 區(qū)間內(nèi)的元素生成一個堆. 默認使用 元素類型 的 操作符 進行判斷堆的類型, 因此生成的是大頂堆 .

            ->當(dāng)使用了 版本2時, 系統(tǒng)使用 用戶定義的 cmp 函數(shù)來構(gòu)建一個堆 

              ->值得注意的是,  make_heap 改變了 迭代器所指向的 容器 的值.

             

             pop_heap() :

             

             原型如下 :

            1.  void pop_heap( random_access_iterator start, random_access_iterator end );

            2.  void pop_heap( random_access_iterator start, random_access_iterator end, StrictWeakOrdering cmp );

               ->pop_heap() 并不是真的把最大(最小)的元素從堆中彈出來. 而是重新排序堆. 它首元素末元素交換,然后將[first,last-1)的數(shù)據(jù)再做成一個堆。 

                 此時, 原來的 首元素 位于迭代器 end-1 的位置,  它已不再屬于堆的一員!  

               ->如果使用了 版本2 , 在交換了 首元素末元素后 ,使用 cmp 規(guī)則 重新構(gòu)建一個堆.

             

             push_heap() :

             

            原型如下 :

            1.   void push_heap( random_access_iterator start, random_access_iterator end );

              2.   void push_heap( random_access_iterator start, random_access_iterator end, StrictWeakOrdering cmp ); 

                -> 算法假設(shè)迭代器區(qū)間[start, end-1)內(nèi)的元素已經(jīng)是一個有效堆, 然后把 end-1 迭代器所指元素加入堆. 

                -> 如果使用了 cmp 參數(shù), 將使用 cmp 規(guī)則構(gòu)建堆.

             

            sort_heap() : 

             

            原型如下 :

              1. void sort_heap (random_access_iterator start, random_access_iterator end);

            2. void sort_heap (random_access_iterator start, random_access_iterator end, StrictWeakOrdering cmp); 

              -> 堆結(jié)構(gòu)被完全破壞, 相當(dāng)于對元素進行排序, 效果和排序算法類似.  

            -> 如果使用了 cmp 參數(shù), 將使用 cmp 規(guī)則排序堆. 

             

            代碼示例 : 

             代碼

            /*
            MiYu原創(chuàng), 轉(zhuǎn)帖請注明 : 轉(zhuǎn)載自 ______________白白の屋
                      
            http://www.cnblog.com/MiYu
            Author By : MiYu
            Test      : 1
            Program   : heap_test
            */

            #include 
            <iostream>
            #include 
            <algorithm>
            #include 
            <vector>
            using namespace std;
            int main ()
            {
                vector 
            <int> vec;
                
            for ( int i = 1; i <= 10++i ) vec.push_back(i);
                
            for ( int i = 0; i < 10++ i ){
                     cout 
            << vec[i] << " ";   
                } cout 
            << endl;
                make_heap ( vec.begin(), vec.end() );
                cout 
            << "\nAfter Make_Heap: " << endl;
                
            for ( int i = 0; i < 10++i ){
                     cout 
            << vec[i] << " ";   
                } cout 
            << endl;
                vec.push_back ( 
            11 );
                cout 
            << "\nAfter Push_Heap: " << endl;
                push_heap (  vec.begin(), vec.end() );
                
            for ( int i = 0; i < 10++i ){
                     cout 
            << vec[i] << " ";   
                } cout 
            << endl;
                cout 
            << "\nAfter Pop_Heap: " << endl;
                pop_heap ( vec.begin(), vec.end() );
                
            for ( int i = 0; i < 11++i ){
                     cout 
            << vec[i] << " ";   
                } cout 
            << endl;
                cout 
            << "\nMake_heap Again! " << endl;
                make_heap ( vec.begin(), vec.end() );
                cout 
            << "\nAfter Sort_Heap: " << endl;
                sort_heap ( vec.begin(), vec.end() );
                
            for ( int i = 0; i < 11++i ){
                     cout 
            << vec[i] << " ";   
                } cout 
            << endl;
                system ( 
            "pause" );
                
            return 0;    

             

            OutPut:

            1 2 3 4 5 6 7 8 9 10

            After Make_Heap:
            10 9 7 8 5 6 3 1 4 2

            After Push_Heap:
            11 10 7 8 9 6 3 1 4 2

            After Pop_Heap:
            10 9 7 8 5 6 3 1 4 2 11

            Make_heap Again!

            After Sort_Heap:
            1 2 3 4 5 6 7 8 9 10 11

             

             

             

             

            #include <iostream>
            #include <algorithm>
            #include <vector>
            using namespace std;
             
            int main () {
              int myints[] = {10,20,30,5,15};
              vector<int> v(myints,myints+5);
              vector<int>::iterator it;
             
              make_heap (v.begin(),v.end());
              cout << "initial max heap   : " << v.front() << endl;
             
              pop_heap (v.begin(),v.end()); v.pop_back();
              cout << "max heap after pop : " << v.front() << endl;
             
              v.push_back(99); push_heap (v.begin(),v.end());
              cout << "max heap after push: " << v.front() << endl;
             
              sort_heap (v.begin(),v.end());
             
              cout << "final sorted range :";
              for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];
             
              cout << endl;
             
              return 0
            
            } 
            OutPut :

            initial max heap : 30

            max heap after pop : 20

            max heap after push: 99

            final sorted range : 5 10 15 20 99


            Feedback

            # re: 學(xué)習(xí)筆記 -- 關(guān)于 STL 中的 heap ( 堆 )  回復(fù)  更多評論   

            2010-09-08 16:28 by Tanky Woo
            小白啊。你最近不行了。。。

            墮落了啊。。。

            最近怎么不A題了。。。

            害哥把你越甩越遠了。。。

            # re: 學(xué)習(xí)筆記 -- 關(guān)于 STL 中的 heap ( 堆 )  回復(fù)  更多評論   

            2010-09-10 22:31 by MiYu
            題目都好難 做不出來 , 我在看數(shù)據(jù)結(jié)構(gòu)方面的 T.T

            # re: 學(xué)習(xí)筆記 -- 關(guān)于 STL 中的 heap ( 堆 )  回復(fù)  更多評論   

            2011-05-12 14:37 by 呢喃的歌聲
            這篇異常給力
            轉(zhuǎn)走了。
            欧美一区二区精品久久| 久久久噜噜噜www成人网| 国产三级观看久久| 久久精品无码一区二区日韩AV| 久久av免费天堂小草播放| 亚洲精品WWW久久久久久| 色欲av伊人久久大香线蕉影院| 精品久久久久久久久中文字幕| 四虎影视久久久免费| a级成人毛片久久| 久久久噜噜噜久久中文字幕色伊伊| 久久精品国产亚洲精品2020| 久久精品18| 久久er99热精品一区二区| 尹人香蕉久久99天天拍| 久久夜色tv网站| 99久久婷婷国产综合亚洲| 亚洲性久久久影院| 久久久久99精品成人片| 成人免费网站久久久| 无码超乳爆乳中文字幕久久| 欧美大战日韩91综合一区婷婷久久青草| 色偷偷久久一区二区三区| 久久天天躁狠狠躁夜夜2020一| 国产精品99久久久久久宅男| 奇米综合四色77777久久| 久久婷婷五月综合97色直播 | 亚洲精品成人网久久久久久| 久久99精品国产99久久6男男| 亚洲色欲久久久综合网| 国产69精品久久久久APP下载| 久久久久亚洲AV成人网| 国产精品永久久久久久久久久| 久久久精品人妻一区二区三区四 | 午夜精品久久久久久| 国产精品欧美久久久久天天影视| 热久久国产精品| 国内精品伊人久久久久网站| 久久99精品久久久久久野外 | 91精品国产综合久久久久久| 久久99精品久久只有精品|