📜  c++ 擦除删除 - C++ (1)

📅  最后修改于: 2023-12-03 14:39:55.451000             🧑  作者: Mango

C++ 擦除删除

在 C++ 中,擦除和删除 (erase and remove) 是两个常见的操作。它们通常用于从容器 (如 vector, list 等) 中删除元素。

擦除操作 (erase)

擦除操作是指从容器中删除指定位置的元素,它的返回值是指向下一个元素的迭代器。它的形式如下:

iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);

其中,第一个函数是删除单个元素,第二个函数是删除指定范围内的元素。下面是使用示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec{ 1, 2, 3, 4, 5 };
    vec.erase(vec.begin() + 2); // 删除第 3 个元素
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " "; // 输出 1 2 4 5
    }
    std::cout << std::endl;
    vec.erase(vec.begin() + 1, vec.end()); // 删除第 2 个元素到末尾的元素
    std::cout << vec.size() << std::endl; // 输出 1
    return 0;
}
删除操作 (remove)

删除操作是指从容器中删除指定值的元素,它会将所有等于该值的元素移动到容器的末尾。它的形式如下:

iterator remove (const value_type& val);

这个函数返回指向被移动元素的最后一个元素的迭代器。为了从容器中真正删除这些元素,我们需要再调用 erase 函数来删除它们,如下面的示例所示:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec{ 1, 2, 3, 2, 4, 2, 5 };
    vec.erase(std::remove(vec.begin(), vec.end(), 2), vec.end());
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " "; // 输出 1 3 4 5
    }
    std::cout << std::endl;
    return 0;
}

上面的代码会删除容器 vec 中所有值为 2 的元素。

总结

擦除和删除是容器操作中常见的两种操作,它们的区别在于擦除是通过迭代器直接删除指定位置的元素,而删除是将指定值的元素移动到容器末尾,需要再进行一次擦除操作才能真正删除这些元素。当我们需要删除容器中某个元素时,应该优先考虑使用擦除操作;当我们需要删除容器中所有指定值的元素时,应该使用删除操作。