• <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)系 :: 聚合  :: 管理
             STL中的容器按存儲方式分為兩類,一類是按以數(shù)組形式存儲的容器(如:vector 、deque);另一類是以不連續(xù)的節(jié)點(diǎn)形式存儲的容器(如:list、set、map)。在使用erase方法來刪除元素時(shí),需要注意一些問題。
            在使用 list、set 或 map遍歷刪除某些元素時(shí)可以這樣使用:

            正確使用方法1std::list< int> List;
            std::list< int>::iterator itList;
            for( itList = List.begin(); itList != List.end(); )
            {
            if( WillDelete( *itList) )
            {
            itList = List.erase( itList);
            }
            else
            itList++;
            }



            正確使用方法2std::list< int> List;
            std::list< int>::iterator itList;
            for( itList = List.begin(); itList != List.end(); )
            {
            if( WillDelete( *itList) )
            {
            List.erase( itList++);
            }
            else
            itList++;
            }


            下面是兩個(gè)錯(cuò)誤的使用方法:

            錯(cuò)誤使用方法1std::list< int> List;
            std::list< int>::iterator itList;
            for( itList = List.begin(); itList != List.end(); itList++)
            {
            if( WillDelete( *itList) )
            {
            List.erase( itList);
            }
            }


            錯(cuò)誤使用方法2std::list< int> List;
            std::list< int>::iterator itList;
            for( itList = List.begin(); itList != List.end(); )
            {
            if( WillDelete( *itList) )
            {
            itList = List.erase( ++itList);
            }
            else
            itList++;
            }

            正確使用方法1:通過erase方法的返回值來獲取下一個(gè)元素的位置
            正確使用方法2:在調(diào)用erase方法之前先使用 “++”來獲取下一個(gè)元素的位置
            錯(cuò)誤使用方法1:在調(diào)用erase方法之后使用“++”來獲取下一個(gè)元素的位置,由于在調(diào)用erase方法以后,該元素的位置已經(jīng)被刪除,如果在根據(jù)這個(gè)舊的位置來獲取下一個(gè)位置,則會出現(xiàn)異常。
            錯(cuò)誤使用方法2:同上。

            這里“++”運(yùn)算符與我們平常的理解剛好相反,erase( itList++) 是先獲取下一個(gè)元素的位置在刪除; erase( ++itList) 是刪除以后再獲取下一個(gè)元素的位置。

            在使用 vector、deque遍歷刪除元素時(shí),也可以通過erase的返回值來獲取下一個(gè)元素的位置:
            正確使用方法std::vector< int> Vec;
            std::vector< int>::iterator itVec;
            for( itVec = Vec.begin(); itVec != Vec.end(); )
            {
            if( WillDelete( *itVec) )
            {
            itVec = Vec.erase( itVec);
            }
            else
            itList++;
            }

            注意:vector、deque 不能像上面的“正確使用方法2”的辦法來遍歷刪除。
            精品国产91久久久久久久| 2021国产精品久久精品| 久久AV高潮AV无码AV| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久精品国产亚洲AV高清热| 久久国产一区二区| 久久精品一区二区| 99久久国产热无码精品免费久久久久| 色综合久久精品中文字幕首页 | 亚洲愉拍99热成人精品热久久| 亚洲精品乱码久久久久久蜜桃图片 | 亚洲人成网站999久久久综合| 无码国内精品久久人妻麻豆按摩| 天天综合久久一二三区| 伊人热热久久原色播放www| 久久国产AVJUST麻豆| 久久天天躁狠狠躁夜夜不卡| 久久精品国产亚洲AV不卡| 国产91久久精品一区二区| 久久久国产99久久国产一| 久久午夜综合久久| 99久久99久久精品国产片果冻| 久久久久国产精品嫩草影院| 久久综合狠狠综合久久激情 | 成人久久综合网| 91精品国产高清久久久久久io | 欧美伊香蕉久久综合类网站| 久久婷婷五月综合97色| 久久久久久久精品妇女99| 青青草国产97免久久费观看| A级毛片无码久久精品免费| 久久精品国产91久久综合麻豆自制 | 一级女性全黄久久生活片免费 | 日韩人妻无码一区二区三区久久99| 国产精品成人久久久久三级午夜电影| 99999久久久久久亚洲| 国产精品美女久久久m| 91精品国产高清久久久久久io| 国产精品久久久久久一区二区三区 | 国产精品久久久久久久午夜片| 日韩一区二区久久久久久|