用erease删除vector里的元素

本文通过一个具体的例子介绍了在C++ STL中使用vector和迭代器时的一个常见错误:在遍历过程中删除元素的顺序不当导致的问题,并强调了正确的操作顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直都没怎么用过STL,迭代器更是极少用到。今天在代码里用到vector,因为要删除其中元素,所以只好用迭代器进行遍历。
         vector里放的是一个对象的指针,当满足条件时就删除对象并从vector里将该元素删除。唉,一时犯晕,在操作时竟然先删除vecotr中的元素,然后删除对象,代码片断如下。

    std::vector<CGapPoolBase*>::iterator iter;
    
for (iter = m_subGapPool.begin(); iter!= m_subGapPool.end(); iter++)
    
{
        
if ((*iter)->freeSeqGap(pgap))
        
{
            
if ((*iter)->isIdle())
            
{
                m_subGapPool.erase(iter);
                delete (
*iter);
            }

            
return true;
        }

    }


         红色部分代码有问题,那两句话应该调换一个顺序。因为没有用过erease,所以不知道erease后迭代器会指向下一个元素,结果在其他地方找了半天,浪费了不少时间,看来有必要好好修练一下Generic Programming和STL了。

         在《The C++ Standard Library》是这么描述erease的,c.erase(pos):  Removes the element at iterator position pos and returns the position of the next element.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值