We have used different algorithms, which have to do with filtering:
| Algorithm | Purpose |
| std::remove | Accepts a range and a value as arguments and removes any occurrence of the value. Returns a new end iterator of the modified range. |
| std::replace | Accepts a range and two values as arguments and replaces all the occurrences of the first value with the second value. |
| std::remove_copy | Accepts a range, an output iterator, and a value as arguments and copies all the values that are not equal to the given value from the range to the output iterator. |
| std::replace_copy | Works similar to std::replace but analogous to std::remove_copy. The source range is not altered. |
| std::copy_if | Works like std::copy but additionally accepts a predicate function as an argument in order to copy only the values that the predicate accepts, which makes it a filter function. |
For every one of the listed algorithms, there also exists an *_if version, which accepts a predicate function instead of a value, which then decides which values are to be removed or replaced.