泛型算法(六)之删除算法

1、remove(ForwardIterator first, ForwardIterator last, const T& val):删除序列中等于给定值的所有元素,保留的元素存放在容器的前部且相对次序不变。容器的size不变。

一般remove算法要与容器的成员函数erase配合使用才能真正删除元素,即:erase——remove惯用法:

        std::vector<int> c;
    c.reserve(10);
    //向c中添加元素
    for (int i = 0; i < 10; i++)
    {
        c.push_back(i);
    }
    //删除c中等于5所有元素
    c.erase(std::remove(c.begin(), c.end(), 5), c.end());
    for (auto var : c)
    {
        std::cout << var << ",";
    }
    //打印结果:0,1,2,3,4,6,7,8,9,    

2、remove_if(ForwardIterator first, ForwardIterator last, UnaryPredicate pred):删除序列中满足给定谓词pred的元素,保留的元素存放在容器的前部且相对次序不变。容器的size不变。

    std::vector<int> c;
    c.reserve(10);
    //向c中添加元素
    for (int i = 0; i < 10; i++)
    {
        c.push_back(i);
    }
    //删除c中大于5的所有元素
    c.erase(std::remove_if(c.begin(), c.end(), [](int element){
        return element > 5;
    }), c.end());
    //输出c
    for (auto var : c)
    {
        std::cout << var << ",";
    }
    //打印结果:0,1,2,3,4,5,

3、remove_copy(InputIterator first, InputIterator last, OutputIterator result, const T&val):把一个序列中不等于给定值的元素复制到另一个序列中

        std::vector<int> c;
    std::vector<int> result;
    result.resize(10);
    c.reserve(10);
    //向c中添加元素
    for (int i = 0; i < 10; i++)
    {
        c.push_back(i);
    }
    //复制c中不等于5的元素到result中
    std::remove_copy(c.begin(), c.end(), result.begin(), 5);
    //输出result
    for (auto var : result)
    {
        std::cout << var << ",";
    }
    //打印结果:0,1,2,3,4,6,7,8,9,0    

4、remove_copy_if(InputIterator first, InputIterator last, OutputIterator result, UnaryPredicate pred):把一个序列中不满足给定谓词pred的元素复制到另一个序列中

    std::vector<int> c;
    std::vector<int> result;
    result.resize(10);
    c.reserve(10);
    //向c中添加元素
    for (int i = 0; i < 10; i++)
    {
        c.push_back(i);
    }
    //复制c中小于等于5的元素到result中
    std::remove_copy_if(c.begin(), c.end(), result.begin(), [](int element){
        return element > 5;
    });
    //输出result
    for (auto var : result)
    {
        std::cout << var << ",";
    }
    //打印结果:0,1,2,3,4,5,0,0,0,0

 

posted on 2016-01-19 10:49  dongtshj  阅读(539)  评论(0编辑  收藏  举报