<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-124  評論-194  文章-0  trackbacks-0


    Stl 刪除元素注意事項

          STL中的容器按存儲方式分為兩類,一類是按以數組形式存儲的容器(如:vector 、deque);另一類是以不連續的節點形式存儲的容器(如:list、set、map)。在使用erase方法來刪除元素時,需要注意一些問題。
          在使用 list、set 或 map遍歷刪除某些元素時可以這樣使用:

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

           或

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

          
          下面是兩個錯 誤的使用方法:

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

             或
    錯誤使用方法2      std::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方法的返回值來獲取下一個元素的位置
          正確使用方法 2:在調用erase方法之前先使用 “++”來獲取下一個元素的位置
          錯誤使用方法 1:在調用erase方法之后使用“++”來獲取下一個元素的位置,由于在調用erase方法以后,該元素的位置已經被刪除,如果在根據這個舊的位置來獲 取下一個位置,則會出現異常。
          錯誤使用方法 2:同上。

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

         在使用 vector、deque遍歷刪除元素時,也可以通過erase的返回值來獲取下一個元素的位置:
    正確使用方法      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”的辦法來遍歷刪除。
    posted on 2011-07-18 17:02 我愛佳娃 閱讀(1487) 評論(0)  編輯  收藏 所屬分類: 工具使用
    主站蜘蛛池模板: 在线亚洲v日韩v| 日韩精品久久久久久免费| 亚洲中文字幕无码久久综合网| 精品一卡2卡三卡4卡免费视频| 亚洲免费在线视频播放| 免费中文字幕不卡视频| 男人进去女人爽免费视频国产| 国产精品高清视亚洲一区二区 | 亚洲午夜福利精品无码| 性色午夜视频免费男人的天堂| 亚洲一卡2卡三卡4卡无卡下载| 国产成人精品日本亚洲专区| 亚洲视频免费观看| 一级毛片一级毛片免费毛片| 亚洲国产高清在线精品一区| 亚洲乱码日产精品a级毛片久久| 国产成人午夜精品免费视频| 国产精品青草视频免费播放| 中国china体内裑精亚洲日本| 亚洲午夜久久久久久久久久| 全免费一级毛片在线播放| 久久国产精品萌白酱免费| 免费人成动漫在线播放r18| 亚洲一区二区三区精品视频| 亚洲中文字幕无码久久精品1| 免费黄色网址入口| 亚欧人成精品免费观看| 91成人免费福利网站在线| 国产精品久久久久久亚洲影视| 亚洲神级电影国语版| 亚洲精品无码高潮喷水在线| 国产成人精品免费直播| 国产在线观看免费观看不卡| 日韩免费的视频在线观看香蕉| 色吊丝性永久免费看码| 美国毛片亚洲社区在线观看| 色噜噜亚洲男人的天堂| 亚洲欧洲日产韩国在线| 亚洲AV本道一区二区三区四区| 国产自偷亚洲精品页65页| 免费一级毛片在级播放|