erase()方法是刪除iterator指定的節點 但是要注意的是在執行完此函數的時候iterator也被銷毀了 這樣的話關於iterator的操作就會報錯 以下是關於erase()方法的正確使用
正確使用方法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++;
}
同時要注意的是 std::list 多線程不安全的,所以多線程對list操作一般都要加鎖,保證安全性。