我们可以在c ++ 11中擦除基于范围的for循环中的项目

 你的念头_780 发布于 2023-02-13 15:32

我想删除所有项目少于vC++ 11标准容器set,这是我的代码:

void delete_less_than(set & ss, int const v) {
   for (auto item: ss) {
      if (item < v) {
        ss.erase(ss.find(item));
      } else break;
  }  
}

代码是否正常工作?我在我的计算机上似乎没问题(g ++ 4.7.3),但在我提交代码的一些在线判断中无限循环.

1 个回答
  • 这不是基于范围的循环.不要用它; for改为使用普通循环.基于范围的版本仅在您想要对容器中的每个元素执行某些操作时,而不会改变容器.

    for (auto it = ss.begin(); it != ss.end(); )
    {
        if (*it < v) { ss.erase(it++); }
        else         { ++it;           }
    }
    

    更简单:

    ss.erase(ss.begin(), ss.lower_bound(v));
    

    2023-02-13 15:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有