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());