Skip to content

关于本章

本章描述如何从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

1、std::vector

2、std::deque (它不是完全基于array的)

使用Erase-remove idiom

For containers based on linked list

1、std::forward_list

2、std::list

这些container提供了removeremove_if成员函数,使用这些成员函数,可以满足需求;

也可以使用algorithm library提供的std::removestd::remove_if,所以它们也可以使用Erase-remove idiom

For containers based on search tree

1、std::set

2、std::multiset

3、std::map

4、std::multimap

这些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系列函数:

1、std::erase, std::erase_if (std::forward_list)