• <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>

            Benjamin

            靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數據加載中……

            STL算法(Algorithms):合并(Merge)

            1、merge:將兩個序列合并成一個新的序列,并對新的序列排序
            原型:
            template <class InputIterator1, class InputIterator2, class OutputIterator>
              OutputIterator merge ( InputIterator1 first1, InputIterator1 last1,
                                     InputIterator2 first2, InputIterator2 last2,OutputIterator result );
            template <class InputIterator1, class InputIterator2,class OutputIterator, class Compare>
            OutputIterator merge ( InputIterator1 first1, InputIterator1 last1,
                                     InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );
            示例:

            // merge algorithm example
            #include <iostream>
            #include 
            <algorithm>
            #include 
            <vector>
            using namespace std;

            int main () {
              
            int first[] = {5,10,15,20,25};
              
            int second[] = {50,40,30,20,10};
              vector
            <int> v(10);
              vector
            <int>::iterator it;

              sort (first,first
            +5);
              sort (second,second
            +5);
              merge (first,first
            +5,second,second+5,v.begin());

              cout 
            << "The resulting vector contains:";
              
            for (it=v.begin(); it!=v.end(); ++it)
                cout 
            << " " << *it;

              cout 
            << endl;
              
              
            return 0;
            }



            2、inplace_merge:將兩個序列合并成一個新的序列,并對新的序列進行歸并排序(這兩個序列必須要進過排序)
            原型:
            template <class BidirectionalIterator>
            void inplace_merge ( BidirectionalIterator first, BidirectionalIterator middle,
                                   BidirectionalIterator last );

            template <class BidirectionalIterator, class Compare>
             void inplace_merge ( BidirectionalIterator first, BidirectionalIterator middle,
                                   BidirectionalIterator last, Compare comp );
            示例:

            // inplace_merge example
            #include <iostream>
            #include 
            <algorithm>
            #include 
            <vector>
            using namespace std;

            int main () {
              
            int first[] = {5,10,15,20,25};
              
            int second[] = {50,40,30,20,10};
              vector
            <int> v(10);
              vector
            <int>::iterator it;

              sort (first,first
            +5);
              sort (second,second
            +5);

              copy (first,first
            +5,v.begin());
              copy (second,second
            +5,v.begin()+5);

              inplace_merge (v.begin(),v.begin()
            +5,v.end());

              cout 
            << "The resulting vector contains:";
              
            for (it=v.begin(); it!=v.end(); ++it)
                cout 
            << " " << *it;

              cout 
            << endl;
              
              
            return 0;
            }


             

            3、includes:測試是一個序列是否在另一個序列中
            原型:
            template <class InputIterator1, class InputIterator2>
            bool includes ( InputIterator1 first1, InputIterator1 last1,
                            InputIterator2 first2, InputIterator2 last2 );
            template <class InputIterator1, class InputIterator2, class Compare>
            bool includes ( InputIterator1 first1, InputIterator1 last1,
                            InputIterator2 first2, InputIterator2 last2, Compare comp );
            示例:

            // includes algorithm example
            #include <iostream>
            #include 
            <algorithm>
            using namespace std;

            bool myfunction (int i, int j) { return i<j; }

            int main () {
              
            int container[] = {5,10,15,20,25,30,35,40,45,50};
              
            int continent[] = {40,30,20,10};

              sort (container,container
            +10);
              sort (continent,continent
            +4);

              
            // using default comparison:
              if ( includes(container,container+10,continent,continent+4) )
                cout 
            << "container includes continent!" << endl;

              
            // using myfunction as comp:
              if ( includes(container,container+10,continent,continent+4, myfunction) )
                cout 
            << "container includes continent!" << endl;

              
            return 0;
            }


             

            4、set_union:和merge類似,不過新序列中沒有重復的元素
            原型:
            template <class InputIterator1, class InputIterator2, class OutputIterator> 
            OutputIterator set_union ( InputIterator1 first1, InputIterator1 last1,         
                                       InputIterator2 first2, InputIterator2 last2,OutputIterator result );
            template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 
            OutputIterator set_union ( InputIterator1 first1, InputIterator1 last1,
                                       InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );
            示例:

            // set_union example
            #include <iostream>
            #include 
            <algorithm>
            #include 
            <vector>
            using namespace std;

            int main () {
              
            int first[] = {5,10,15,20,25};
              
            int second[] = {50,40,30,20,10};
              vector
            <int> v(10);                           // 0  0  0  0  0  0  0  0  0  0
              vector<int>::iterator it;

              sort (first,first
            +5);     //  5 10 15 20 25
              sort (second,second+5);   // 10 20 30 40 50

              it
            =set_union (first, first+5, second, second+5, v.begin());
                                                           
            // 5 10 15 20 25 30 40 50  0  0

              cout 
            << "union has " << int(it - v.begin()) << " elements.\n";

              
            return 0;
            }


             

            5、set_intersection:兩個序列的交集
            原型:
            template <class InputIterator1, class InputIterator2, class OutputIterator> 
            OutputIterator set_intersection ( InputIterator1 first1, InputIterator1 last1,
                                              InputIterator2 first2, InputIterator2 last2,OutputIterator result );
            template <class InputIterator1, class InputIterator2,class OutputIterator, class Compare>
            OutputIterator set_intersection ( InputIterator1 first1, InputIterator1 last1,
                                              InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );
            示例:

            // set_intersection example
            #include <iostream>
            #include 
            <algorithm>
            #include 
            <vector>
            using namespace std;

            int main () {
              
            int first[] = {5,10,15,20,25};
              
            int second[] = {50,40,30,20,10};
              vector
            <int> v(10);                           // 0  0  0  0  0  0  0  0  0  0
              vector<int>::iterator it;

              sort (first,first
            +5);     //  5 10 15 20 25
              sort (second,second+5);   // 10 20 30 40 50

              it
            =set_intersection (first, first+5, second, second+5, v.begin());
                                                           
            // 10 20 0  0  0  0  0  0  0  0

              cout 
            << "intersection has " << int(it - v.begin()) << " elements.\n";

              
            return 0;
            }


             

            6、set_difference:序列(first1,last1)不在序列(first2,last2)中的元素
            原型:
            template <class InputIterator1, class InputIterator2, class OutputIterator> 
            OutputIterator set_intersection ( InputIterator1 first1, InputIterator1 last1,
                  InputIterator2 first2, InputIterator2 last2,outputIterator result );
            template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 
            OutputIterator set_intersection ( InputIterator1 first1, InputIterator1 last1,
                                              InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );
            示例:

            // set_difference example
            #include <iostream>
            #include 
            <algorithm>
            #include 
            <vector>
            using namespace std;

            int main () {
              
            int first[] = {5,10,15,20,25};
              
            int second[] = {50,40,30,20,10};
              vector
            <int> v(10);                           // 0  0  0  0  0  0  0  0  0  0
              vector<int>::iterator it;

              sort (first,first
            +5);     //  5 10 15 20 25
              sort (second,second+5);   // 10 20 30 40 50

              it
            =set_difference (first, first+5, second, second+5, v.begin());
                                                           
            // 5 15 25  0  0  0  0  0  0  0

              cout 
            << "difference has " << int(it - v.begin()) << " elements.\n";

              
            return 0;
            }


             

            7、set_symmetric_difference:所有不在序列(first1,last1)和序列(first2,last2)中的元素
            原型:
            template <class InputIterator1, class InputIterator2, class OutputIterator> 
            OutputIterator    set_symmetric_difference ( InputIterator1 first1, InputIterator1 last1,
                                                         InputIterator2 first2, InputIterator2 last2,OutputIterator result );
            template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare>
            OutputIterator    set_symmetric_difference ( InputIterator1 first1, InputIterator1 last1,
                                                         InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );
            示例:

            // set_symmetric_difference example
            #include <iostream>
            #include 
            <algorithm>
            #include 
            <vector>
            using namespace std;

            int main () {
              
            int first[] = {5,10,15,20,25};
              
            int second[] = {50,40,30,20,10};
              vector
            <int> v(10);                           // 0  0  0  0  0  0  0  0  0  0
              vector<int>::iterator it;

              sort (first,first
            +5);     //  5 10 15 20 25
              sort (second,second+5);   // 10 20 30 40 50

              it
            =set_symmetric_difference (first, first+5, second, second+5, v.begin());
                                                           
            // 5 15 25 30 40 50  0  0  0  0

              cout 
            << "symmetric difference has " << int(it - v.begin()) << " elements.\n";

              
            return 0;
            }


            posted on 2012-02-05 21:33 Benjamin 閱讀(10135) 評論(0)  編輯 收藏 引用 所屬分類: 泛型編程

            亚洲色大成网站www久久九| 精品午夜久久福利大片| 久久久久国产| 四虎影视久久久免费| 囯产精品久久久久久久久蜜桃 | 精品视频久久久久| 久久人人超碰精品CAOPOREN| 精品久久久久成人码免费动漫| 欧美激情精品久久久久久久| 亚洲国产精品高清久久久| 国产精品九九九久久九九| 青青草原综合久久大伊人导航| 久久人人爽人人爽人人片AV麻烦| 性欧美大战久久久久久久久| 精品久久久久久久中文字幕| 久久久亚洲欧洲日产国码是AV| 国产麻豆精品久久一二三| 亚洲伊人久久成综合人影院| 国产精品久久成人影院| 国内精品伊人久久久久777| 亚洲一区二区三区日本久久九| 久久久亚洲AV波多野结衣| 欧美国产精品久久高清| 国产午夜精品久久久久九九电影 | 久久亚洲国产午夜精品理论片| 久久国产影院| 国产精品视频久久久| 亚洲AV无码久久寂寞少妇| 性做久久久久久久久老女人 | 老男人久久青草av高清| 久久99精品国产麻豆不卡| 国产精品久久久久国产A级| 亚洲精品无码久久久久久| 精品久久久久久国产| 伊人热热久久原色播放www| 久久人人爽人人澡人人高潮AV| 伊人久久免费视频| 成人国内精品久久久久影院VR| 精品久久一区二区| 久久精品国产秦先生| 久久精品国产99国产精品澳门|