c++语法之Lambda表达式

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class printstring
{

public:
    printstring(ostream &o = cout , string s = "end!")
        :os(o),sep(s){}
    //括号运算符重载()
    void operator()(const string &s)const
    {
        os<< s << ' ' << sep << endl;
    }
    
private:
    ostream &os;
    string sep;
};


bool compare(string &a,string &b)
{
    return a < b;
}

int main()
{
    string s = "guangzhou";
    
    //容器搜索
    bool flag = (find(s.begin(),s.end(),'g') == s.end());
    //字符串搜索
    string::size_type flag1 = s.find("u") ;
    cout<<flag1<<endl;
    
    printstring printer;
    printer(s);
    printstring errors(cerr,"china");
    errors(s);
    
        /*
     *lambda表达式
     * [capture list](parameter list) -> return type
     * {
     *    function body
     * }
     * 可以忽略参数列表:等价于指定一个空参数列表,不忽略时不能有默认形参
     * 可以忽略返回类型:根据函数体的代码推断出返回类型。若除return外还有其他语句,则返回void
     * 必须保留捕获列表和函数体
     * (1)显式:值捕获[a],引用捕获[&a]
     * (2)隐式捕获:值[=],引用[&]
     * (3)混合:[&或者=,..]第一个必须是&或者=
     * */
    auto f = []{return 42;};
    cout << f() <<endl;
    //返回bool
    auto com = [](const string &a, const string &b){return a<b;};
    
    //com2返回void,所以要指明返回类型
    auto com2 = [](const string &a, const string &b)
    {
        if(a<b) return a;
        else return b;
    };
    cout<<endl<<com2("aa","bb")<<endl;
    auto com3 = [](const string &a, const string &b) -> const string
    {
        if(a<b) return a;
        else return b;
    };
    cout<<endl<<com3("yang","yangg")<<endl;
   
    vector<int> v{ 1,2,3,4,5,-1};
    transform(v.begin(),v.end(),v.begin(), [](const int a)
    {
        if(a<0) return -a;
        else return a;
    });
    for(auto a:v)
        cout<<a<<endl;
    
    cout << "Hello World!" << endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值