• remove_if 的效率测试


    #include <iostream>
    #include <functional>
    #include <vector>
    #include <algorithm>
    #include <chrono>
    
    using namespace std;
    
    vector<char> data;
    void init(){
            int i = 10000;
            while(i--){
                    data.push_back('a');
                    data.push_back('b');
                    data.push_back('c');
            }
    }
    
    void test1(){
    
            for(auto it = data.begin();it!=data.end() ;){
                    if(*it == 'b'){
                            data.erase(it);
                    }else{
                            ++ it;
                    }
    }
    
    void test2(){
            data.erase(remove_if(data.begin(),data.end(),[](char c){return c = 'b';}),data.end());
    }
    
    
    int main(int argc, char * argv[]){
         init();
            auto start = chrono::system_clock::now();
         if(*argv[1] == '1'){
                    test1();
            }else{
                    test2();
            }
            auto medium = chrono::system_clock::now();
         chrono::duration<double> dur = medium - start; 
         std::cout << "spend " << dur.count() <<" ";

         return 0;
    }
     

    # ./a.out 1
    spend 0.0281981
    # ./a.out 2
    spend 0.0020453

    1W * 3个数据, remove_if 的快些

    另外看到一个小细节,上面使用的是匿名函数做stl算法的谓词函数, 有些使用我们使用对象函数作为谓词时,需要注意不同的平台可能实现不同,有的是传值,有的是传引用

    class test{

    bool operator (){

    // compare

    }

    }

    状态函数能维护自己的状态(成员参数),而这里缺不能依赖对象的状态

  • 相关阅读:
    学习进度报告2021/4/5
    学习进度报告2021/4/4
    学习进度报告2021/4/3
    学习进度报告2021/4/2
    学习进度报告2021/4/1
    学习进度报告2021/3/31
    《学会提问》读书笔记3
    学习进度报告2021/3/30
    MySQL入门——如何进行主从配置
    MySQL入门详解——事务、锁、优化
  • 原文地址:https://www.cnblogs.com/hustcpp/p/11014873.html
Copyright © 2020-2023  润新知