List如何正确地在遍历时删除元素-EFFECTIVE STL 9

这篇博客探讨了在C++中如何正确使用`std::list::remove_if`和`pop_front`删除元素。文章通过示例展示了在遍历过程中删除元素的迭代器管理技巧,以及删除列表头部元素的两种等价写法。内容强调了在删除元素时更新迭代器的重要性,以避免迭代器失效。

std::list::remove_if

遍历时删除元素的正确写法:

list<int> l;
for (list<int>::iterator iter=l.begin();iter!=l.end;)
{
       if (condition (*iter) == 0 )
       {
      
           iter=l.erase(iter); // 注意此处要用iter接受l.erase(iter)的返回值
       }
       else
       {
            ++iter;
       }
}

删除头部第一个元素的正确写法:

// 写法一
g_listDownloadTask.pop_front(); // 删除第一个元素 

// 写法二
auto iter = g_listDownloadTask.begin(); 
if (iter != g_listDownloadTask.end())
{
      iter = g_listDownloadTask.erase(iter); //g_listDownloadTask.erase(iter++);
}
else
{
      ++iter;
}


写法一和写法二等价吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值