栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++学习day08 :lambda和异常捕获

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++学习day08 :lambda和异常捕获

数组定义使用初始化列表, = 等号可加可不加 
     * 初始化列表 {C++11特性}

lambda 俗称匿名函数 
 * 语法:  [捕捉列表](参数列表)->返回值类型{语句块}
 * [捕捉列表]:  = 和 &
 * (参数列表):  参数传递
 * ->返回值类型:
 * {语句块}:
 * for循环高级遍历 
 * 语法 for(auto value : 序列)
 *     {
 *         语句块
 *     }


    //sort(开始迭代子,末尾迭代子) //默认升序 -> 需要用到 < 操作符重载
    //sort(开始迭代子,末尾迭代子,回调函数/仿函数) //自定义排序规则
    //sort(values.begin(),values.end());
   
   

lambda 俗称匿名函数
 * 语法:  [捕捉列表](参数列表)->返回值类型{语句块}
 * [捕捉列表]:  = 和 &
 * (参数列表):  参数传递
 * ->返回值类型:
 * {语句块}:

 需求: 捕获一个变量,只是在 lambda 函数可改,而函数外不变,相当于做一个值拷贝方式
    允许以下说明符:
        mutable:允许 函数体 修改各个复制捕获的对象,以及调用其非 const 成员函数;
        使用位置在 参数列表后 , 返回值类型前

捕获异常 
     *try{
     *  会出现异常的代码块
     * }catch(异常类型)

文件名:main.cpp
发布人:文云龙
#include 
#include 
#include 
#include     //通用算法
using namespace std;
#define LEN(value) sizeof(value)/sizeof(value[0])

int test0()
{
    
    int addr_int[]{1,2,4,5,6,7};
    for(unsigned int i = 0; i < LEN(addr_int);i++)
    {
        cout << addr_int[i] << ",";
    }
    cout << endl;

    cout << "-------- vector ----------" << endl;
    vector v_value{1,2,3,4,5,6}; //对于一些简单的类型,可以高效省略push_back函数
    for(unsigned int i = 0; i < v_value.size();i++)
    {
        cout << v_value[i] << ",";
    }
    cout << endl;

    cout << "------- map --------------" << endl;
    map map_value{ {"张三",18},{"李四",19},{"王五",18}};
    //1.定义 迭代器
    map::iterator it;
    for(it = map_value.begin(); it != map_value.end();it++)
    {
        //it ===== 指针 *pair
        cout << (*it).first
             << "t" << (*it).second
             << endl;
    }
    cout << "王五t" << map_value["王五"] << endl;
    return 0;
}


void test1()
{
    vector v_value{1,2,3,4,5};
    //vector::iterator it = v_value.begin();
    for(auto it = v_value.begin();it != v_value.end();it++)
    {
        //it 迭代子
        cout << *it << ",";
    }
    cout << endl;

    map map_value{ {"张三",18}, {"李四",19}};
    for(auto it = map_value.begin();it != map_value.end();it++)
    {
        //it 迭代子->键值对
        cout << (*it).first << "t" << (*it).second << endl;
    }
}

void test2()
{
    vector values{523,1234,123,5253,64,5674,567,213};
    cout << "排序前:";
    for(auto value : values)
    {//vlaue 相当于 values 中的序列数据,他会一次遍历该序列
        cout << value << ",";
    }
    cout << endl;

    
    //sort(开始迭代子,末尾迭代子) //默认升序 -> 需要用到 < 操作符重载
    //sort(开始迭代子,末尾迭代子,回调函数/仿函数) //自定义排序规则
    //sort(values.begin(),values.end());
    
    
    sort(values.begin(),values.end(),[](int data1,int data2)->bool{
        if(data1 > data2) return true;
        return false;
    });

    cout <<"排序后:";
    for(auto value : values)
    {
        cout << value << ",";
    }
    cout << endl;
}

void test3()
{
    int value = 10;
    cout << "value = " << value <void{
        cout << "lambda的无参,无返回值,无捕获" << endl;
    };
    p1();

    void (*p2)(int);   //函数指针
    p2 = [](int data)->void{
        cout << "lambda的int参数,无返回值,无捕获" << endl;
        cout << "data = " << data << endl;
    };

    p2(value);

    int (*p3)(int,int); //函数指针  求两个数之和的函数
    p3 = [](int data1,int data2)->int{
        cout << "lambda的int,int参数,int返回值,无捕获" << endl;
        cout << "data1 = " << data1
             << "tdata2 = " << data2
             << " = t" << data1 + data2
             << endl;
        return data1 + data2;
    };

    int sum = p3(10,20);
    cout << "sum = " << sum << endl;

    auto p4 = [=](){    //既然回调函数定义满足不了他的需求,我们只能使用自动类型推导
        //sum = 50;  报错,说 = 是只读
        cout << "捕获sum = " << sum << endl;    //打印了我的sum数据
    };

    p4();

    auto p5 = [&](){    //既然回调函数定义满足不了他的需求,我们只能使用自动类型推导
        sum = 50;       // & 是可改
        cout << "捕获sum = " << sum << endl;    //打印了我的sum数据
    };

    p5();

    auto p6 = [value,&sum](){
        //value = 50;  报错,说 value 是只读常量
        cout << value << endl;
        sum = 500;  // &引用方式可以直接修改操作
        cout << sum << endl;
    };
    p6();

    
    auto p7 = [value]()mutable->void{   //复制捕获的对象
        value = 60;
        cout << "mutable 的 value = " << value << endl;
    };
    p7();
    cout << "mutable 外的 value = " << value << endl;
}


int main()
{
    test3();
}



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928139.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号