歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

STL中list的erase()方法

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操作一般都要加鎖,保證安全性。

Copyright © Linux教程網 All Rights Reserved