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

            huyutian

            他強(qiáng)由他強(qiáng),清風(fēng)拂山崗;他橫由他橫,明月照大江。他自狠來他自惡,我自一口真氣足

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              20 隨筆 :: 47 文章 :: 22 評(píng)論 :: 0 Trackbacks

             

            /*
            set/multiset會(huì)根據(jù)待定的排序準(zhǔn)則,自動(dòng)將元素排序。兩者不同在于前者不允許元素重復(fù),而后者允許。
            1) 不能直接改變?cè)刂担驗(yàn)槟菢訒?huì)打亂原本正確的順序,要改變?cè)刂当仨毾葎h除舊元素,則插入新元素
            2) 不提供直接存取元素的任何操作函數(shù),只能通過迭代器進(jìn)行間接存取,而且從迭代器角度來看,元素值是常數(shù)
            3) 元素比較動(dòng)作只能用于型別相同的容器(即元素和排序準(zhǔn)則必須相同)
            set模板原型://Key為元素(鍵值)類型
            template <class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) >
            從原型可以看出,可以看出比較函數(shù)對(duì)象及內(nèi)存分配器采用的是默認(rèn)參數(shù),因此如果未指定,它們將采用系統(tǒng)默認(rèn)方式,
            另外,利用原型,可以有效地輔助分析創(chuàng)建對(duì)象的幾種方式
            */

            #include 
            <iostream>
            #include 
            <string>
            #include 
            <set>

            using namespace std;

            struct strLess
            {
               
            bool operator() (const char *s1, const char *s2) const
               
            {
                
            return strcmp(s1, s2) < 0;
               }

            }
            ;

            void printSet(set<int> s)
            {
            copy(s.begin(), s.end(), ostream_iterator
            <int>(cout, "") );

            // set<int>::iterator iter;
            // for (iter = s.begin(); iter != s.end(); iter++)
            //    //cout<<"set["<<iter-s.begin()<<"]="<<*iter<<", "; //Error
            //    cout<<*iter<<", ";
            cout<<endl;
            }


            void main()
            {
            //創(chuàng)建set對(duì)象,共5種方式,提示如果比較函數(shù)對(duì)象及內(nèi)存分配器未出現(xiàn),即表示采用的是系統(tǒng)默認(rèn)方式
            //創(chuàng)建空的set對(duì)象,元素類型為int,
            set<int> s1; 
            //創(chuàng)建空的set對(duì)象,元素類型char*,比較函數(shù)對(duì)象(即排序準(zhǔn)則)為自定義strLess
            set<const char*, strLess> s2( strLess); 
            //利用set對(duì)象s1,拷貝生成set對(duì)象s2
            set<int> s3(s1); 
            //用迭代區(qū)間[&first, &last)所指的元素,創(chuàng)建一個(gè)set對(duì)象
            int iArray[] = {133219};
            set<int> s4(iArray, iArray + 3);
            //用迭代區(qū)間[&first, &last)所指的元素,及比較函數(shù)對(duì)象strLess,創(chuàng)建一個(gè)set對(duì)象
            const char* szArray[] = {"hello""dog""bird" };
            set<const char*, strLess> s5(szArray, szArray + 3, strLess() );

            //元素插入:
            //1,插入value,返回pair配對(duì)對(duì)象,可以根據(jù).second判斷是否插入成功。(提示:value不能與set容器內(nèi)元素重復(fù))
            //pair<iterator, bool> insert(value)
            //2,在pos位置之前插入value,返回新元素位置,但不一定能插入成功
            //iterator insert(&pos, value)
            //3,將迭代區(qū)間[&first, &last)內(nèi)所有的元素,插入到set容器
            //void insert[&first, &last)
            cout<<"s1.insert() : "<<endl;
            for (int i = 0; i <5 ; i++)
                s1.insert(i
            *10);
            printSet(s1);

            cout
            <<"s1.insert(20).second = "<<endl;;
            if (s1.insert(20).second)
                cout
            <<"Insert OK!"<<endl;
            else
                cout
            <<"Insert Failed!"<<endl;

            cout
            <<"s1.insert(50).second = "<<endl;
            if (s1.insert(50).second)
            {cout<<"Insert OK!"<<endl; printSet(s1);}
            else
                cout
            <<"Insert Failed!"<<endl;

            cout
            <<"pair<set<int>::iterator::iterator, bool> p;\np = s1.insert(60);\nif (p.second):"<<endl;
            pair
            <set<int>::iterator::iterator, bool> p;
            = s1.insert(60);
            if (p.second)
            {cout<<"Insert OK!"<<endl; printSet(s1);}
            else
               cout
            <<"Insert Failed!"<<endl;

            //元素刪除
            //1,size_type erase(value) 移除set容器內(nèi)元素值為value的所有元素,返回移除的元素個(gè)數(shù)
            //2,void erase(&pos) 移除pos位置上的元素,無返回值
            //3,void erase(&first, &last) 移除迭代區(qū)間[&first, &last)內(nèi)的元素,無返回值
            //4,void clear(), 移除set容器內(nèi)所有元素

            cout
            <<"\ns1.erase(70) = "<<endl;
            s1.erase(
            70);
            printSet(s1);
            cout
            <<"s1.erase(60) = "<<endl;
            s1.erase(
            60);
            printSet(s1);

            cout
            <<"set<int>::iterator iter = s1.begin();\ns1.erase(iter) = "<<endl;
            set<int>::iterator iter = s1.begin();
            s1.erase(iter);
            printSet(s1);

            //元素查找
            //count(value)返回set對(duì)象內(nèi)元素值為value的元素個(gè)數(shù)
            //iterator find(value)返回value所在位置,找不到value將返回end()
            //lower_bound(value),upper_bound(value), equal_range(value) 略
            cout<<"\ns1.count(10) = "<<s1.count(10)<<", s1.count(80) = "<<s1.count(80)<<endl;
            cout
            <<"s1.find(10) : ";
            if (s1.find(10!= s1.end()) 
                cout
            <<"OK!"<<endl;
            else
                cout
            <<"not found!"<<endl;

            cout
            <<"s1.find(80) : ";
            if (s1.find(80!= s1.end()) 
                cout
            <<"OK!"<<endl;
            else
                cout
            <<"not found!"<<endl;

            //其它常用函數(shù)
            cout<<"\ns1.empty()="<<s1.empty()<<", s1.size()="<<s1.size()<<endl;
            set<int> s9;
            s9.insert(
            100);
            cout
            <<"s1.swap(s9) :"<<endl;
            s1.swap(s9);
            cout
            <<"s1: "<<endl;
            printSet(s1);
            cout
            <<"s9: "<<endl;
            printSet(s9);
            //lower_bound,upper_bound,equal_range(略)
            }



            ///////////////i測(cè)試結(jié)果/////////////////////////
            s1.insert() :
            010203040,
            s1.insert(
            20).second =
            Insert Failed
            !
            s1.insert(
            50).second =
            Insert OK
            !
            01020304050,
            pair
            <set<int>::iterator::iterator, bool> p;
            = s1.insert(60);
            if (p.second):
            Insert OK
            !
            0102030405060,

            s1.erase(
            70=
            0102030405060,
            s1.erase(
            60=
            01020304050,
            set<int>::iterator iter = s1.begin();
            s1.erase(iter) 
            =
            1020304050,

            s1.count(
            10= 1, s1.count(80= 0
            s1.find(
            10) : OK!
            s1.find(
            80) : not found!

            s1.empty()
            =0, s1.size()=5
            s1.swap(s9) :
            s1:
            100,
            s9:
            1020304050,
            posted on 2010-02-07 23:55 胡雨田 閱讀(51987) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 編程技巧
            久久精品九九亚洲精品| 亚洲一本综合久久| 欧美亚洲国产精品久久| 777午夜精品久久av蜜臀| 久久天天躁夜夜躁狠狠躁2022| 久久天天躁狠狠躁夜夜avapp | 久久综合成人网| 久久久亚洲AV波多野结衣| 精品国产91久久久久久久| 久久er国产精品免费观看8| 国产精品99久久久精品无码| 99久久精品午夜一区二区| 久久精品国产亚洲av瑜伽| 日韩乱码人妻无码中文字幕久久| 91麻豆精品国产91久久久久久| 久久伊人色| 狠狠精品干练久久久无码中文字幕| 中文字幕人妻色偷偷久久| 精品久久久无码中文字幕天天| 人妻无码中文久久久久专区| 午夜肉伦伦影院久久精品免费看国产一区二区三区| 香蕉99久久国产综合精品宅男自| 久久精品九九亚洲精品天堂| 色偷偷久久一区二区三区| 久久久久亚洲AV综合波多野结衣| 国产欧美一区二区久久| 久久精品国产亚洲AV影院| 狠狠人妻久久久久久综合蜜桃| 国内精品久久久人妻中文字幕| 中文字幕精品久久久久人妻| 狠狠色综合久久久久尤物| 久久99国产精一区二区三区| 久久偷看各类wc女厕嘘嘘| 久久天天躁狠狠躁夜夜躁2014| 久久久无码精品亚洲日韩京东传媒| www性久久久com| 国产精品久久久亚洲| 1000部精品久久久久久久久| 成人国内精品久久久久一区 | 久久久亚洲欧洲日产国码二区| 99精品国产免费久久久久久下载|