• remove_if erase


    https://blog.csdn.net/u010913001/article/details/53348580

    #include <algorithm>
    forward_iterator remove_if( forward_iterator start, forward_iterator end, Predicate p ); 

    函数remove_if()移除序列[start, end)中所有应用于谓词p返回true的元素.
    此函数返回一个指向被修剪的序列的最后一个元素迭代器.
    记住, remove_if()并不会实际移除序列[start, end)中的元素; 如果在一个容器上应用remove_if(), 容器的长度并不会改变(remove_if()不可能仅通过迭代器改变容器的属性), 所有的元素都还在容器里面. 实际做法是, remove_if()将所有应该移除的元素都移动到了容器尾部并返回一个分界的迭代器. 移除的所有元素仍然可以通过返回的迭代器访问到. 为了实际移除元素, 你必须对容器自行调用erase()以擦除需要移除的元素. 这也是erase-remove idiom名称的由来:

    container.erase(remove_if(container.begin(), container.end(), pred), container.end());        //通式
    vector<int> vt;
    int arr[9] = {1,2,3,4,5,6,7,8,9};
    vt.assign(arr,arr+9);
    vector<int>::iterator pos;
    pos = remove_if(vt.begin(),vt.end()),compose2(logical_and<bool>(),bind2nd(greater<int>(),4),bind2nd(less<int>(),7))); //删除比4大且比7小的数
    vt.erase(pos,vt.end()); //全部移动到末尾了
    //结果1,2,3,4,7,8,9

    remove_if()类似于partition(), 但有两点不同: 1) 它们使用的谓词条件刚好相反. 2) remove_if只强调前面部分(第二部分不再需要了) 

    remove_if()以线性时间(linear time)运行.
    remove_if()不能用于关联容器如set<>或map<>.

  • 相关阅读:
    Python常用函数
    MySQL常用操作
    Python与JAVA的异同
    token
    用户cookie和会话session、sessionID的关系
    Jenkins应用
    Python3 logging模块
    python 多线程threading模块
    引用的声明周期结束时,并不会调用析构函数,只有本体的声明周期结束时,才会调用析构函数
    行为像指针的类的对象每次作为参数传入函数或者传出函数时都要小心
  • 原文地址:https://www.cnblogs.com/wllwqdeai/p/10125280.html
Copyright © 2020-2023  润新知