优化代码for (auto in = Iniomdl.begin(); in != Iniomdl.end(); ++in) { for (auto ic = in->lscsys.begin(); ic != in->lscsys.end(); ++ic) { if (ic->yes_or_not == 3) { in->lscsys.remove(*ic); } } }
时间: 2024-03-09 17:51:44 浏览: 56
优化代码
这段代码的作用是在Iniomdl中的每个元素中的lscsys列表中删除yes_or_not为3的元素。但是,使用remove方法会造成迭代器失效,可能会导致未定义的行为。你可以使用C++11中的erase-remove惯用法来避免这个问题,代码如下:
```
for (auto& in : Iniomdl) {
in.lscsys.erase(std::remove_if(in.lscsys.begin(), in.lscsys.end(),
[](const auto& ic) { return ic.yes_or_not == 3; }),
in.lscsys.end());
}
```
这个代码使用了lambda表达式来判断元素是否需要删除,然后使用erase-remove惯用法来删除元素。这个方法比直接使用remove更加安全可靠。
阅读全文