当前位置: 首页 > news >正文

来年做那个网站致富做货代的有哪些网站

来年做那个网站致富,做货代的有哪些网站,个人网站备案后内容可以改么,手机做网站自己做文章目录 1. C98对自定义类型的排序2. lambda表达式语法2.1 捕捉列表 3. lambda底层原理 1. C98对自定义类型的排序 在C98中,想要对自定义类型就行排序,我们得自己写仿函数来表明我们相对哪一项进行排序 struct Student {Student(string name, long id…

在这里插入图片描述

文章目录

    • 1. C++98对自定义类型的排序
    • 2. lambda表达式语法
      • 2.1 捕捉列表
    • 3. lambda底层原理

1. C++98对自定义类型的排序

在C++98中,想要对自定义类型就行排序,我们得自己写仿函数来表明我们相对哪一项进行排序

struct Student
{Student(string name, long id, double score):_name(name),_id(id),_score(score){}string _name;long _id;double _score;
};//按名字排序 -- 降序
struct CmpName
{bool operator()(const Student& stu1, const Student& stu2){return stu1._name < stu2._name;}
};
//按学号排序 -- 降序
struct CmpId
{bool operator()(const Student& stu1, const Student& stu2){return stu1._id < stu2._id;}
};
//按分数排序 -- 降序
struct CmpScore
{bool operator()(const Student& stu1, const Student& stu2){return stu1._score < stu2._score;}
};int main()
{vector<Student> v = { {"张三",101,99.3},{"李四",104,85.2},{"王五",102,99.9} };sort(v.begin(), v.end(),CmpName());sort(v.begin(), v.end(),CmpId());sort(v.begin(), v.end(),CmpScore());return 0;
}

如果代码风格较好,然后加上了注释,这其他人一看就懂是什么意思。但如果命名不规范,就是个很头疼的问题。

例如:

int main()
{vector<Student> v = { {"张三",101,99.3},{"李四",104,85.2},{"王五",102,99.9} };sort(v.begin(), v.end(),Cmp1());sort(v.begin(), v.end(),Cmp2());sort(v.begin(), v.end(),Cmp3());return 0;
}

这里的仿函数,我们看到就不知道是对哪一项进行排序,就得往前翻,如果前面的命名也不规范,那就十分痛苦。

而且一旦我们的对象的参数多了,那我们就得写出对应的仿函数,这不是很方便,于是在C++11中出现了lambda表达式

2. lambda表达式语法

lambda表达式格式[capture-list] (parameters) mutable -> return-type { statement }

示例:[] (int x,int y)->int { return x+y;}

  • lambda表达式各部分说明

    []:捕捉列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来 判断接下来的代码是否为lambda函数,捕捉列表能够捕捉上下文中的变量供lambda函数使用。

    ():参数列表。与普通函数的参数列表一致,如果不需要参数传递,则可以 连同()一起省略。

    mutable:默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性。使用该修饰符时,参数列表不可省略(即使参数为空)。

    ->returntype:返回值类型。用追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可省略返回值类型明确情况下,也可省略,由编译器对返回类型进行推导

    {statement}:函数体。在该函数体内,除了可以使用其参数外,还可以使用所有捕获到的变量。

int main()
{vector<Student> v = { {"张三",101,99.3},{"李四",104,85.2},{"王五",102,99.9} };sort(v.begin(), v.end(), [](const Student& stu1, const Student& stu2)->bool {return stu1._name < stu2._name; });sort(v.begin(), v.end(), [](const Student& stu1, const Student& stu2)->bool {return stu1._id < stu2._id; });sort(v.begin(), v.end(), [](const Student& stu1, const Student& stu2)->bool {return stu1._score < stu2._score; });return 0;
}

2.1 捕捉列表

  • [var]:表示值传递方式捕捉变量var

    int a = 1;
    int b = 2;
    double rate = 2.5;
    auto f1 = [rate](int x, int y) {return x + y; };
    cout<<f1(a,b)<<endl;	//输出 7.5
    
  • [&var]:表示引用传递捕捉变量var

    适用于对象较大或者需要修改捕捉列表里面的值

    int a = 1;
    int b = 2;
    auto swap1 = [a, b]() mutable {//mutable让捕捉的a b可以修改//但这里面的a b 属于是外面a b的拷贝int tmp = a;a = b;b = tmp;
    };
    swap1();auto swap2 = [&a, &b] {//捕捉引用,可以直接修改外面a b的值了int tmp = a;a = b;b = tmp;
    };
    swap2();
    
  • [=]:表示值传递方式捕获所有父作用域中的变量(包括this)

    捕捉所有的外部变量

    int a = 1;
    int b = 2;
    int c = 3;
    auto f2 = [=]() {cout << a << " " << b << " " << c << " " << endl;
    };
    f2();
    
  • [&]:表示引用传递捕捉所有父作用域中的变量(包括this)

    捕捉所有外部变量的引用

    int a = 1;
    int b = 2;
    int c = 3;	
    auto f3 = [&]() {
    cout << ++a << " " << ++b << " " << ++c << " " << endl;
    };
    f3();
    cout << a << " " << b << " " << c << " " << endl;
    //也可以混合捕捉,这里的a就是不可修改的了,普通捕捉
    auto f4 = [&, a] {
    cout << a << " " << ++b << " " << ++c << " " << endl;
    };
    cout << a << " " << b << " " << c << " " << endl;
    
  • [this]:表示值传递方式捕捉当前的this指针

3. lambda底层原理

int main()
{auto f1 = [](int x, int y) {return x + y; };auto f2 = [](int x, int y) {return x + y; };//f1 = f2;	//errorcout << typeid(f1).name() << endl;cout << typeid(f2).name() << endl;return 0;
}

这段代码运行之后发现,f1f2的类型是

image-20231018120622477

这里lambda的底层就是一个仿函数,就和范围的for的底层就是迭代器一样,上层将其封装了,调用的就是类的operator()

image-20231018121051482

http://www.yayakq.cn/news/54094/

相关文章:

  • 理财公司网站建设方案鑫牛元网站建设
  • 企业网站建设排名口碑深圳网页制作推广哪家好
  • 线上购物网站开发深圳网站优化推广方案
  • 那些网站可以上传自己做的视频网站运营方案书
  • 祥云建站平台手机logo在线制作 免费
  • 设计型网站套用别人产品图片做网站
  • wordpress 中英文网站模板陕西建设厅八大员报名官网
  • 适合权重小的网站做的专题the7企业中 英文wordpress模板
  • 青海网站设计高端黑客做网站
  • 东莞网站关键词优化效果与有权重网站做友链
  • 网站做图分辨率是多少公司名字大全不重名
  • 做网站ddos攻击加强品牌建设
  • 上海市奉贤区建设局网站frontpage网页制作视频教程
  • 赤峰做网站的网络公司深圳宝安做网站公司
  • 网站建设dw站点建设做网站可能遇到的困难
  • 网站开发知识版权建设了网站怎么管理系统
  • win2008r2搭建php网站wordpress访客量
  • 龙陵县住房和城乡建设局网站深圳网站的网络公司
  • 网站维护建设婚纱礼服外贸网站
  • 网站开发的平台广东建设工程招标网站
  • 嘉定网站设计制作托管维护温州市瓯海建设局网站
  • 铜陵网站建设价格重庆公司招聘
  • 南昌网站建设哪里好河南郑州最新情况
  • 网站建设为什么要全款腾讯企点怎么群发
  • 四川万景建设工程有限公司网站wordpress弹窗公告
  • 网站建设要企业邮箱什么格式
  • 做公益网站宁夏网站建设电话
  • 现代化公司网站建设什么做网站推广
  • 四川网站建设 旋风宁波发布最新通报
  • 青岛做网站好的公司东莞seo优化排名推广