• <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)  編輯 收藏 引用 所屬分類: 泛型編程

            久久av高潮av无码av喷吹| 久久久黄色大片| 伊人久久大香线蕉亚洲| 久久亚洲AV无码西西人体| 久久精品嫩草影院| 久久er热视频在这里精品| 国产精品国色综合久久| 欧美牲交A欧牲交aⅴ久久| 午夜精品久久久久久毛片| 人妻精品久久无码专区精东影业| 久久99久国产麻精品66| 99久久99久久精品国产片果冻 | 久久天天日天天操综合伊人av| 青青国产成人久久91网| 成人午夜精品久久久久久久小说 | 久久久精品国产sm调教网站| 97久久国产露脸精品国产| 久久亚洲精品成人av无码网站| 72种姿势欧美久久久久大黄蕉| 91精品国产91久久| 欧美精品一区二区久久| 久久亚洲精品无码AV红樱桃| 久久免费美女视频| 中文字幕久久精品| 狠狠色丁香久久婷婷综合五月| 国产成人精品久久一区二区三区av| 久久综合成人网| 久久精品国产亚洲AV香蕉| 久久99精品国产麻豆蜜芽| 久久久久亚洲AV无码观看| 久久亚洲综合色一区二区三区| 亚洲中文字幕伊人久久无码 | 久久精品国产一区二区三区不卡 | 久久久久亚洲av成人网人人软件| 久久精品国产亚洲av麻豆色欲 | 99精品久久精品| 久久午夜无码鲁丝片午夜精品| A级毛片无码久久精品免费| 国产精品熟女福利久久AV| 色欲综合久久躁天天躁蜜桃| 久久99国产一区二区三区|