• <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>
            posts - 311, comments - 0, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            為了說明白兩者,我首先用erase()函數(shù)寫一個(gè)程序,目的是從已經(jīng)存在的int型容器中刪除值為3的元素,代碼如下:
            #include <iostream>
            #include 
            <vector>
            using namespace std;
            int main()
            {
                vector
            <int> ivec;
                
            int i;
                vector
            <int>::iterator it;
                
            for(i = 0;i < 10;++i)
                    ivec.push_back(i);
                
            for(i = 0;i < 10;++i)
                    ivec.push_back(i);
                 
            for(it = ivec.begin();it != ivec.end();++it)
                    
            if(*it == 3)
                        ivec.erase(it);   
            //此處執(zhí)行的是刪除操作
                for(it = ivec.begin();it != ivec.end();++it)
                    cout
            <<*it<<endl;
                
            return 0;
            }
                  但最終的結(jié)果閉并不是我所想要的,出現(xiàn)了如下錯(cuò)誤:


                  不用多想,就應(yīng)該能猜出錯(cuò)誤的根源,因?yàn)閑rase()操作會(huì)使后面的迭代器失效,當(dāng)刪除掉第一個(gè)值為3的元素后,后面的迭代器跟之前的迭代器不同了,如果還是在以前迭代器的基礎(chǔ)上進(jìn)行++操作的話,就會(huì)出現(xiàn)上面的問題,在C++ Primer中的9.2.2節(jié)也提到了這一點(diǎn),使用erase()操作后,任何指向已刪除元素的迭代器都具有無效值,畢竟該迭代器指向了容器中不再存在的元素。

                  如果想比較保險(xiǎn)的刪除容器中的一個(gè)元素的話,還是推薦使用泛型算法remove_if()好了,首先需要指出的是,泛型算法不依賴于特定的容器類型,它是“泛型”的,可作用在不同類型的容器和不同類型的元素上。此外,還有這些算法從不使用容器操作,因而其實(shí)現(xiàn)和類型無關(guān),元素的訪問和遍歷都是通過迭代器實(shí)現(xiàn)的,泛型算法可能會(huì)改變存儲(chǔ)在容器中的元素的值,也許會(huì)在容器中移動(dòng)元素,但是,算法從不直接添加或者刪除元素。

                  首先介紹下msdn中對remove_if()的介紹:
            算法的功能是:Eliminates elements that satisfy a predicate from a given range without disturbing the order of the remaining elements and returning the end of a new range free of the specified value.
            翻譯過來就是說:在一個(gè)給定范圍內(nèi)刪除滿足一定條件的元素,在刪除元素的過程中不改變剩余元素的位置,并同時(shí)返回一個(gè)沒有要?jiǎng)h除元素的新容器的迭代器end值。
            我們可以利用這個(gè)remove_if()的返回值來刪除剩余的元素,這個(gè)只需要加入語句ivec.erase(remove_if(****),ivec.end());就可以了。

            用remove()和remove_if()其實(shí)都可以很簡單的解決在上個(gè)程序中要解決的問題,remove()的返回值跟remove_if()的返回值是一樣的,程序如下:

            #include <iostream>
            #include 
            <vector>
            #include 
            <algorithm>
            using namespace std;
            //bool compare(int d)
            //{
            //    return d == 3;
            //}
            int main()
            {
                vector
            <int> ivec;
                
            int i;
                vector
            <int>::iterator it;
                
            for(i = 0;i < 5;++i)
                    ivec.push_back(i);
                
            for(i = 0;i < 5;++i)
                    ivec.push_back(i);
                
            //it = remove_if(ivec.begin(),ivec.end(),compare);
                it = remove(ivec.begin(),ivec.end(),3);
                ivec.erase(it,ivec.end());
                
            for(vector<int>::iterator it = ivec.begin();it != ivec.end();++it)
                    cout
            <<*it<<endl;
                
            return 0;
            }

             

                  剛才看到Effective C++中有關(guān)于這方面的知識(shí),第32條條款講到了刪除元素的知識(shí),可以去看下,這里就不再贅述了。

            久久人人爽人人爽人人片av麻烦 | 18岁日韩内射颜射午夜久久成人| 久久精品无码一区二区无码| 99久久免费国产特黄| 久久线看观看精品香蕉国产| 日韩久久久久中文字幕人妻| 怡红院日本一道日本久久| 亚洲精品午夜国产VA久久成人| 999久久久免费精品国产| 久久久久无码国产精品不卡| 日韩久久久久久中文人妻| 久久久久无码精品| 精品蜜臀久久久久99网站| 亚洲精品NV久久久久久久久久| 久久人爽人人爽人人片AV| 久久久久亚洲AV综合波多野结衣 | 久久91精品久久91综合| 亚洲国产天堂久久久久久| 国产成人精品久久免费动漫 | 国产精品久久婷婷六月丁香| 国产精品视频久久| 中文字幕无码久久久| 大美女久久久久久j久久| 久久久久无码精品国产| 久久免费视频1| 久久伊人五月天论坛| 99久久精品免费看国产一区二区三区 | 人妻无码久久精品| 亚洲天堂久久精品| 精品久久无码中文字幕| 久久精品国产色蜜蜜麻豆| 亚洲精品99久久久久中文字幕| 91精品国产综合久久香蕉| 精品国产一区二区三区久久| 精品免费久久久久久久| 精品久久久久香蕉网| AV无码久久久久不卡蜜桃| 久久精品国产99久久久| 国产精品禁18久久久夂久| 看久久久久久a级毛片| 中文字幕无码免费久久|