STL中list的erase()方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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操作一般都要加锁,保证安全性
 
转自:http://blog.csdn.net/iam_charlie/article/details/6062472

以上是关于STL中list的erase()方法的主要内容,如果未能解决你的问题,请参考以下文章

C++ STL中erase函数的用法 求助~~

stl的erase()陷阱--迭代器失效总结

C ++的STL中的erase()实际上是否删除了元素?

C++中stl模版中的erase()和end()(和我之前提的问题不一样)

C++ STL 中 remove 和 erase 的区别

C++ STL 中 remove 和 erase 的区别