我想删除所有项目少于v
C++ 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),但在我提交代码的一些在线判断中无限循环.
这不是基于范围的循环.不要用它; 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));