zoukankan      html  css  js  c++  java
  • STL中list的erase()方法

    http://www.cnblogs.com/gshlsh17/

    rase()方法是删除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
  • 相关阅读:
    尽管以C++为基础,但 Java 是一种更纯粹的面向对象程序设计语言
    Java 还是 C++?
    计划的回报
    阶段4:校订
    阶段3:开始创建
    阶段2:如何构建?
    阶段1:要制作什么?
    阶段0:拟出一个计划
    不要迷失
    分析和设计
  • 原文地址:https://www.cnblogs.com/virusolf/p/4906774.html
Copyright © 2011-2022 走看看