zoukankan      html  css  js  c++  java
  • Lambada表达式的作用

    Lambda函数的用处

     
    假设你设计了一个地址簿的类。现在你要提供函数查询这个地址簿,可能根据姓名查询,可能根据地址查询,还有可能两者结合。要是你为这些情况都写个函数,那么你一定就跪了。所以你应该提供一个接口,能方便地让用户自定义自己的查询方式。在这里可以使用lambda函数来实现这个功能。
    [cpp] view plaincopy
     
    1. #include <string>  
    2. #include <vector>  
    3.   
    4. class AddressBook  
    5. {  
    6.     public:  
    7.     // using a template allows us to ignore the differences between functors, function pointers   
    8.     // and lambda  
    9.     template<typename Func>  
    10.     std::vector<std::string> findMatchingAddresses (Func func)  
    11.     {   
    12.         std::vector<std::string> results;  
    13.         for ( auto itr = _addresses.begin(), end = _addresses.end(); itr != end; ++itr )  
    14.         {  
    15.             // call the function passed into findMatchingAddresses and see if it matches  
    16.             if ( func( *itr ) )  
    17.             {  
    18.                 results.push_back( *itr );  
    19.             }  
    20.         }  
    21.         return results;  
    22.     }  
    23.   
    24.     private:  
    25.     std::vector<std::string> _addresses;  
    26. };  

    从上面代码可以看到,findMatchingAddressses函数提供的参数是Func类型,这是一个泛型类型。在使用过程中应该传入一个函数,然后分别对地址簿中每一个entry执行这个函数,如果返回值为真那么表明这个entry符合使用者的筛选要求,那么就应该放入结果当中。那么这个Func类型的参数如何传入呢?
     
    [cpp] view plaincopy
     
    1. AddressBook global_address_book;  
    2.   
    3. vector<string> findAddressesFromOrgs ()  
    4. {  
    5.     return global_address_book.findMatchingAddresses(   
    6.         // we're declaring a lambda here; the [] signals the start  
    7.         [] (const string& addr) { return addr.find( ".org" ) != string::npos; }   
    8.     );  
    9. }  

    可以看到,我们在调用函数的时候直接定义了一个lambda函数。参数类型是
    [cpp] view plaincopy
     
    1. const string& addr  
    返回值是bool类型。
    如果用户要使用不同的方式查询的话,只要定义不同的lambda函数就可以了。
  • 相关阅读:
    leetcode 763 划分字母区间
    leetcode 392 判断子序列
    Leetcode 665 修改一个数成为非递减数组 (Easy)
    leetcode 605 种花问题 贪心算法
    leetcode 452 用最少数量的箭引爆气球 贪心算法
    leetcode 455 分发饼干 贪心算法
    delphi中的 CLX Application
    delphi 之DCOM应用服务器定义函数
    SqlServer 之 sp_executesql系统存储过程的介绍和使用
    delphi 之调用WinSock的API获取本机的机器名称和IP地址
  • 原文地址:https://www.cnblogs.com/wzxNote/p/10719533.html
Copyright © 2011-2022 走看看