一些文档中写作 ‘erase-remove-idiom’.
这个例子很明显:
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> numbers = {1, 3, 2, 4, 3, 5, 3};
// Remove all occurrences of 3 from the vector.
numbers.erase(std::remove(numbers.begin(), numbers.end(), 3), numbers.end());
for (int number : numbers) {
std::cout << number << " ";
}
return 0;
}
先调用 std::remove
,把不要的元素移到后面,然后再调用 std::vector::erase
删除不要的元素。
这样做可以减少元素移动的次数,提高效率。(相比于find-erase)
此类算法在leetcode上也考察过。