erase()方法是刪除iterator指定的節點 但是要註意的是在執行完此函數的時候iterator也被銷毀了 這樣的話關於iterator的操作就會報錯 以下是關於erase()方法的正確使用正確使用方法1 : std::list List;std::list::iterator itList;...
erase()方法是刪除iterator指定的節點 但是要註意的是在執行完此函數的時候iterator也被銷毀了 這樣的話關於iterator的操作就會報錯 以下是關於erase()方法的正確使用
正確使用方法1 :
![複製代碼](http://common.cnblogs.com/images/copycode.gif)
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++; } }
![複製代碼](http://common.cnblogs.com/images/copycode.gif)
正確使用方法2:
![複製代碼](http://common.cnblogs.com/images/copycode.gif)
std::list<int> List; std::list<int>::iterator itList; for( itList = List.begin(); itList != List.end(); ) { if( WillDelete( *itList) ) { List.erase( itList++); } else { itList++; } }
![複製代碼](http://common.cnblogs.com/images/copycode.gif)
錯誤使用方法1:
![複製代碼](http://common.cnblogs.com/images/copycode.gif)
std::list< int> List; std::list< int>::iterator itList; for( itList = List.begin(); itList != List.end(); itList++) { if( WillDelete( *itList) ) { List.erase( itList); } }
![複製代碼](http://common.cnblogs.com/images/copycode.gif)
錯誤使用方法2:
![複製代碼](http://common.cnblogs.com/images/copycode.gif)
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++; }
![複製代碼](http://common.cnblogs.com/images/copycode.gif)
同時要註意的是 std::list 多線程不安全的,所以多線程對list操作一般都要加鎖,保證安全性