我希望以幂等的方式从容器中删除元素(即,如果元素存在,则删除它,否则不执行任何操作,我可以多次执行此操作,结果相同)
据我所知,使用map :: erase是幂等的,即使键不存在也是安全的。我认为set
也是一样的。
那么对于vector(和类似的线性容器)呢? 我知道这个方法很有效:
auto it = std::find(vec.begin(), vec.end(), val);
if (it != vec.end())
vec.erase(it);
但我在想,有没有一种方法可以不必手动检查 it == vec.end()
?
根据CPP文档,vec.erase(vec.end())
的行为是未定义的,这意味着我们不能执行 vec.erase(std::find(..))
。
是否有任何方法可以为我执行此检查,以便我可以使用一行代码进行remove_if_exist
?
remove_if
而采用find
/erase
的方式呢?这是因为您只想删除一个特定的元素吗?如果是的话,您可以将其放在 "if" 条件语句中。 - tadmanif (auto it = std::find(...); it != vec.end()) vec.erase(it);
。 - NathanOliverif ((auto it = std::find(...)) != vec.end()) vec.erase(it);
。在C++11之前,您只需将auto
替换为vector<type>::iterator
即可。 - Remy Lebeau