QMap QList的安全删除操作

1.QMap

有时候回遇见在循环中需要删除某个map元素的操作,如果直接remove其实会影响内部迭代器,这样操作会有问题。删除方式换为erase并更新迭代器即可

for (auto it = map.begin(); it != map.end();)
    if (it.value() % 2 == 1)
        it = map.erase(it);
    else
        ++it;

这里之所以安全的原因是erase已经是下一个成员了,根据文档说明,erase会返回下一个成员的迭代器

Removes the (key, value) pair pointed to by the iterator pos from the map, and returns an iterator to the next item in the map.

上面的是STL-style iterators的写法,qmap同时也提供了Java-style iterators的写法


  QMutableMapIterator<QString, QString> i(map);
  while (i.hasNext()) {
      i.next();
      if (i.key() == i.value())
          i.remove();
  }

java的看起来更方便,但是效率会稍微低一点

The Java-style iterators are more high-
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值