<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 我愛佳娃 閱讀(1486) 評論(0)  編輯  收藏 所屬分類: 工具使用
    主站蜘蛛池模板: 少妇太爽了在线观看免费视频| 亚洲视频在线免费| 久久精品国产亚洲77777| 亚洲国产精品嫩草影院在线观看 | 中文字幕亚洲天堂| 亚洲综合国产精品| 久久精品无码免费不卡| 亚洲三级在线免费观看| 啦啦啦手机完整免费高清观看| 日韩免费视频网站| 久久久青草青青亚洲国产免观| 国产精品免费在线播放| 亚洲日韩v无码中文字幕| 亚洲色偷偷综合亚洲av78| 深夜特黄a级毛片免费播放| 久久精品中文字幕免费| 免费被黄网站在观看| 亚洲欧洲一区二区| 五月天婷婷精品免费视频| 成人A级毛片免费观看AV网站| 亚洲色无码一区二区三区| 国产免费爽爽视频在线观看 | 亚洲精品国产日韩无码AV永久免费网| 免费在线不卡视频| 亚洲一卡二卡三卡| 免费看无码特级毛片| 亚洲国产成人久久综合碰| 亚洲啪啪免费视频| 99久久免费精品高清特色大片| 久久久久亚洲AV成人网人人软件| 免费人成又黄又爽的视频在线电影| 国产精品亚洲不卡一区二区三区 | 一级a性色生活片久久无少妇一级婬片免费放 | 国产精品亚洲а∨无码播放不卡| 24小时日本电影免费看| 亚洲av无码一区二区三区不卡 | 120秒男女动态视频免费| 亚洲日韩精品无码专区加勒比☆| 久久免费视频99| 亚洲人成色4444在线观看| 亚洲成人高清在线|