remove-erase惯用法通过std::remove或std::remove_if将需保留元素前移,返回新末尾迭代器,再调用erase释放冗余空间,实现高效删除;适用于vector等序列容器,不适用list、set等关联容器。

在C++中,remove-erase idiom 是一种标准且高效的方法,用于从容器(尤其是 std::vector)中删除满足特定条件的元素。直接使用 std::remove 并不会真正删除元素,而是需要配合 erase() 方法才能完成物理删除。
std::remove 实际上并不改变容器大小,它只是将不满足删除条件的元素前移,并返回一个指向新逻辑末尾的迭代器。真正的内存清理和元素删除需要调用容器的 erase() 方法。
基本语法如下:
container.erase(std::remove(container.begin(), container.end(), value), container.end());
若想删除容器中所有等于某个值的元素,例如删除 vector 中所有的 5:
立即学习“C++免费学习笔记(深入)”;
std::vector<int> vec = {1, 5, 2, 5, 3, 5, 4};
vec.erase(std::remove(vec.begin(), vec.end(), 5), vec.end());
执行后,vec 中所有 5 都被移除,只剩下 {1, 2, 3, 4}。
如果要根据条件删除元素,比如删除所有偶数,应使用 std::remove_if:
std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8};
vec.erase(
std::remove_if(vec.begin(), vec.end(), [](int n) { return n % 2 == 0; }),
vec.end()
);
这段代码会删除所有偶数,结果为 {1, 3, 5, 7}。
使用 remove-erase idiom 时需注意以下几点:
std::vector、std::array、std::string。对于 std::list 或 std::forward_list,建议直接使用其成员函数 remove() 或 remove_if()。std::remove 内部通过赋值来“压缩”数据。std::set、std::map,它们不支持此操作方式,应使用 erase() 直接删除。基本上就这些。只要记住:remove 负责整理,erase 负责回收,两者结合才是完整删除。
以上就是c++++如何正确使用remove-erase idiom删除元素 _c++ remove-erase删除元素方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号