erase-remove惯用法

一些文档中写作 ‘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上也考察过。