1. 程式人生 > >C++迭代器在刪除元素後的失效問題

C++迭代器在刪除元素後的失效問題

C++迭代器失效問題__map/set等關聯容器如何刪除元素__vector/list/deque等序列容器如何刪除元素__迭代器如何使用  


序列性容器::(vector和list和deque) 
        erase迭代器不僅使所指向被刪元素的迭代器失效,而且使被刪元素之後的所有迭代器失效,所以不能使用erase(iter++)的方式,但是erase的返回值為下一個有效的迭代器。


        所以正確方法為::
        for( iter = c.begin(); iter != c.end(); )
              iter = c.erase(iter);
 
關聯性容器::(map和set比較常用)
        erase迭代器只是被刪元素的迭代器失效,但是返回值為void,所以要採用erase(iter++)的方式刪除迭代器,  
        所以正確方法為::
        for( iter = c.begin(); iter != c.end(); )  
              c.erase(iter++);


Tips:
       其實對於list兩種方式都可以正常工作




STL的容器刪除元素,除了使用迭代器外,還可以使用erase(key)的方式。


size_t rm_num = obj.erase(key);


rm_num標示刪除key的成員的個數,在map中key是key值,在其他容器中,key是一個value。