zoukankan      html  css  js  c++  java
  • Effective_STL 学习笔记(三十二) 如果真的想删除东西的话就在类似于 remove 的算法后接上 erase

    remove 的声明:

    1   template<class ForwardIterator, class T>
    2   ForwardIterator remove( ForwardIterator first, ForwardIterator last, const T & value );

    remove 接收指定它操作的元素区间的一对迭代器,不接收一个容器,所以不知道作用与哪个容器

    remove 并不 “真的” 删除东西,因为它做不到

    从容器中除去一个元素,唯一的方法是调用那个容器的一个成员函数,几乎都是 erase 的某种形式

    remove 移动指定区间中的元素直到所有 “不删除” 元素在区间的开头(相对位置和原来它们的一样)

    它返回一个指向最后一个的下一个 “不删除的” 元素的迭代器,返回值是区间的 “新逻辑终点”

    如果真的要删除东西的话,应该在 remove 后面接上 erase

    1   vector<int> v;
    2   v.erase( remove( v.begin(), v.end(), 99 ), v.end() );
    3   cout << v.size(); 

    把 remove 的返回值作为 erase 区间形式第一个实参传递,是个惯用法。

    remove-list,整合到 list 的成员函数 remove 中

    1   list<int> li;   // 建立一个 list
    2   li.remove(99);   // 删除所有等于 99 的元素,
    3      // STL 中唯一的一个名叫 remove 又能从容器中去除元素的函数

    在关联容器中类似的 remove_erase 函数叫 erase

    同理,类似remove 算法:remove_if 和 unique 要删除东西

    成对调用 unique 和 erase, unique 在 list 中类似于remove

  • 相关阅读:
    [hdu4436 str2int]后缀自动机SAM(或后缀数组SA)
    bytedance专题
    LSTM+CRF维特比解码过程
    spark core类梳理
    spark源码阅读---Utils.getCallSite
    python2.7官方文档阅读笔记
    cs224d---词向量表示
    cs231n---强化学习
    cs231n---生成模型
    Spring 2017 Assignments3
  • 原文地址:https://www.cnblogs.com/kidycharon/p/10039889.html
Copyright © 2011-2022 走看看