zoukankan      html  css  js  c++  java
  • Effective_STL 学习笔记(九) 在删除选项中仔细选择

    去除一个容器中有特定值的所有对象:

      如果容器是 vector、string 或 deque,使用 erase-remove惯用法

        c.erase( remove( c.begin(), c.end() , val), c.end() ); 

          // remove() 函数,将值不为 val 的元素前移,并返回一个指向新的超尾值的迭代器

          // remove() 函数不是 vector 的成员函数,因此不能调整 vector 容器的长度,

          // remove() 函数并不是真的删除,要想真正删除,使用 erase() 或者 resize();

          // erase() 函数可以删除给定区间的元素,接受两个迭代器参数。

      如果容器是 list,使用 list::remove

        l.remove( val );  // remove 是 list 的成员函数,是去除特定值的最佳方法

      如果容器是标准非关联容器,使用它的 erase 成员函数

        c.erase( val );   // erase 成员函数是去除特定值的最佳方式

    去除容器中满足特定判定式的所有对象:

      如果容器是 vector、string 或 deque,使用 erase-remove_if 惯用法

        c.erase( remove_if( c.begin(), c.end(), badValue ), c.end() );

          // 去掉badValue返回真的对象的最佳方法

      如果容器是 list,使用 list::remove_if

        c.remove_if( badValue );

          // c 为 list 时,去掉badValue返回真的对象的最佳方法

      如果容器是标准关联容器,使用 remove_copy_if 和 swap,或写一个循环来遍历容器元素,

      当你把迭代器传给 erase 时记得后置递增它  

        remove_copy_if( c.begin, c.end(), inserter( goodValues, goodValues.end() ), badValue );

          // 从 c 拷贝不删除的值到 goodValues

        c.swap( goodValues );  

          // 交换 c 和 goodValues

    在循环内做某些事情(除了删除对象外)

      如果容器是标准序列容器

  • 相关阅读:
    工欲性能调优,必先利其器(2)- 火焰图
    工欲性能调优,必先利其器(1)
    关于烂代码的那些事(上)
    HTTP 返回码中 301 与 302 的区别
    HTTP 状态码 301 和 302 详解及区别——辛酸的探索之路
    HTTP 状态码之:301、302 重定向
    记一次获得 3 倍性能的 go 程序优化实践,及 on-cpu / off-cpu 火焰图的使用
    Coloring Flame Graphs: Code Hues
    StackOverflow 创始人关于如何高效编程的清单
    Spring Bean的生命周期(非常详细)
  • 原文地址:https://www.cnblogs.com/kidycharon/p/10003919.html
Copyright © 2011-2022 走看看