码迷,mamicode.com
首页 > 其他好文 > 详细

STL中list的erase()方法

时间:2016-01-15 08:42:31      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

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

STL中list的erase()方法

标签:

原文地址:http://www.cnblogs.com/shouce/p/5132228.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!