日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

STL remove和erase

 WUCANADA 2012-04-14
STL remove和erase
2010年12月23日 星期四 下午 5:08
remove   算法描述:查找的得到第一個(gè)元素的位置,然后從此位置開(kāi)始遍歷容器,將后面的元素依次前移,跳過(guò)和value相同值的元素,也就是說(shuō),所有和value相 同值的元素都會(huì)被覆蓋,而其他的元素都會(huì)依次前移。最后remove返回"指向最后一個(gè)   '有用'   元素的iterator",但是在remove算法過(guò)程中,并沒(méi)有修改原容器的size,以及end()。但是從邏輯角度看,最后的[   從remove得到的iterator---_result,   容器的結(jié)尾end()   )   這個(gè)區(qū)間里面的元素已經(jīng)沒(méi)有意義了。所以這些元素不應(yīng)該屬于該容器了。remove算法能做的僅此而已,并沒(méi)有刪除這些無(wú)用的元素。   
    
  結(jié)論:移除容器里面的元素不應(yīng)該使用remove算法,而是容器自己的方法erase()。

erase使用:

#include <iostream>
#include <vector>

using namespace std;

 

int main()
{
    vector<int> arr;
    arr.push_back(6);
    arr.push_back(7);
    arr.push_back(8);
    arr.push_back(9);

    for(vector<int>::iterator it=arr.begin(); it!=arr.end(); )
    {
        if(* it == 8)
        {
            it = arr.erase(it);
        }
        else
        {
            ++it;
        }
    }

  
//注意上面不能寫(xiě)成
    /*
        for(vector<int>::iterator it=arr.begin(); it!=arr.end(); it ++)
        {
            if(* it == 8)
            {
                arr.erase(it);     //在erase后,it失效,并不是指向vector的下一個(gè)元素,it成了一個(gè)“野指針”。
            }
        }
    */
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多