关于本章
本章描述如何从C++ container中删除符合条件的元素,正如维基百科Erase–remove idiom中所描述的:
A common programming task is to remove all elements that have a certain value or fulfill a certain criterion from a collection.
后面为了描述便利,我将这种操作称为erase_if
;
Before C++20
C++ STL提供了多种container,需要结合这些container的实现来选择合适的:
For containers based on an array
2、std::deque (它不是完全基于array的)
For containers based on linked list
这些container提供了remove
、remove_if
成员函数,使用这些成员函数,可以满足需求;
也可以使用algorithm library提供的std::remove
、std::remove_if
,所以它们也可以使用Erase-remove idiom。
For containers based on search tree
1、std::set
3、std::map
这些container无法使用,使用iterate-delete 方式。
For containers based on hash table
1、unordered_set(C++11)
2、unordered_map(C++11)
3、unordered_multiset(C++11)
4、unordered_multimap(C++11)
C++20
C++20提供了std::erase_if
系列函数: