我想删除所有项目少于vC++ 11标准容器set,这是我的代码:
void delete_less_than(set<int> & ss, int const v) {
for (auto item: ss) {
if (item < v) {
ss.erase(ss.find(item));
} else break;
}
}
Run Code Online (Sandbox Code Playgroud)
代码是否正常工作?我在我的计算机上似乎没问题(g ++ 4.7.3),但在我提交代码的一些在线判断中无限循环.
Ker*_* SB 24
这不是基于范围的循环.不要用它; for改为使用普通循环.基于范围的版本仅在您想要对容器中的每个元素执行某些操作时,而不会改变容器.
for (auto it = ss.begin(); it != ss.end(); )
{
if (*it < v) { ss.erase(it++); }
else { ++it; }
}
Run Code Online (Sandbox Code Playgroud)
更简单:
ss.erase(ss.begin(), ss.lower_bound(v));
Run Code Online (Sandbox Code Playgroud)