bugprone-inaccurate-erase¶
检查 erase()
方法的错误使用。
像 remove()
这样的算法不会真正从容器中删除任何元素,而是返回一个指向容器末尾第一个冗余元素的迭代器。这些冗余元素必须使用 erase()
方法删除。当由于使用不合适的重载而导致并非所有元素都被删除时,此检查会发出警告。
例如,以下代码只删除了一个元素
std::vector<int> xs;
...
xs.erase(std::remove(xs.begin(), xs.end(), 10));
调用 erase()
的双参数重载以删除子范围
std::vector<int> xs;
...
xs.erase(std::remove(xs.begin(), xs.end(), 10), xs.end());