c++ Primer学习完后第十章泛型算法的小结

C++Primer第五版 习题答案 目录 C++Primer第五版 习题答案 本文当作我学习C++的一个记录,这里的习题答案并不是标准答案,仅仅是我的理解,如有错误,请大家指出,谢谢! 我参考的文章会在文末列出,谢谢大家。 第一章 ... 阅读详情

c++ Primer学习完后第十章泛型算法的小结
泛型算法主要是针对容器的算法,利用迭代器对容器操作。要注意的是,泛型算法一般情况下不会直接操作容器,而是利用迭代器进行操作。这些算法都是定义在标准库中,可以看书中后面的附录A,选择需要的算法和相应的头文件。

这里就需要引入新名词,谓词。我理解额谓词,基本上就是一个bool类型的函数和lambda表达式(一个可调用对象),传递到算法中。谓词分为一元谓词和二元谓词(如果是函数的话,就是看形参有几个,有两个的话就是二元谓词)。有的算法只能接受一个一元谓词,但是有的时候就需要两个形参。这个时候就需要lambda表达式。
lambda表达式的格式如下:
[ ] () -> return type {};
[]:捕获列表,在调用lambda表达式的函数中,要使用这个函数的那个变量。里面可以为空,但是“[]”必须写。
():参数列表,与普通函数一样。可以不写。
return type :返回的类型。可以不写。
{}:函数体,与普通函数一样。必须有。

例子:

 auto f = [] {return 42;};
 cout << f() << endl;//返回42 

需要注意的是,如果只有一句return语句的话auto是可以判断类型的,但是如果出了return语句之外还有其他的语句,那么auto就是自动判断为void类型,这个时候就需要指定类型,如 -> int 。
lambda的捕获列表,和函数形参差不多,会进行拷贝。但是与函数不同的是,捕获列表一开始就进行拷贝,函数是在调用的时候拷贝。意思就是lambda一但开始捕获变量,那么,那个变量一开始的值是多少,以后调用这个lambda那个变量的值一样。所以,lambda也是可以用引用来使用的,与函数的一样。

bind函数。一般的表达式:auto newfunction = bind(function,arg_list);
比起讲理论,还是直接上例子比较好理解吧。
假设一个函数bool jugsz(const string &s7,int sz);那么auto newjugsz = bind(jugsz,_1,6);
newjugsz(“fda”);相当于使用jugszsz(“fda”,6)。
bind里面的第一个参数就是要绑定的函数名,_1是newjugsz 要传入的第一个参数,sz就会默认是6。这样newjugsz也是可以是一个一元谓词。如果变成
auto newjugsz = bind(jugsz,_1,_2);那么newjugsz(_1,_2)相当于jugszsz(_1,_2)。如果auto newjugsz = bind(jugsz,_2,_1);那么newjugsz(_1,_2)相当于jugszsz(_2,_1)。如果要在bind里面引用的话,不能使用“&”,要用ref()。

5种迭代器,输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机访问迭代器。算法调用迭代器会有限制。如果用了不符合类型的迭代器,会出现错误。除了输入迭代器和输出迭代器,其他三种是一种层次关系,或者说是子集关系。也就是说前向迭代器有的功能,双向迭代器都有,但是有一些功能双向迭代器有,而前向迭代器没有。

这里做一个小笔记。主要是想要有一个印象,以后有用到的话,如果想不起具体的用法再去查。
插入迭代器:back_iteratorer(调用push_back),front_iteratorer(调用push_front),iteratorer(使用insert成员函数)。

哦。对了。list和forward_list都有自己版本的算法。毕竟是链表。

《C++ Primer》导学系列:第 10 章 - 泛型算法 本节总结了解了泛型算法的基本概念和用途,掌握了非修改算法和修改算法的区别。学会了如何选择和使用合适的算法,理解了常用算法的参数和返回值。掌握了一些常用的复杂算法的使用方法,并通过示例代码进行了实践。提高建议多练习算法操作:通过编写更多涉及泛型算法的程序,熟悉各种操作方法,提高对泛型算法的使用能力。深入理解算法:通过阅读标准库文档和相关书籍,深入理解泛型算法的实现原理和使用场景,提高编写高效代码的能力。关注性能优化:在实际项目中,根据具体需求选择最合适的算法和迭代器类型,优化程序性能。 阅读详情

相关推荐

C++Primer 第五版 —— 《第十章 》泛型算法

目录 目录 Preface 概述( find 算法) find 算法是如何工作的 只读算法(find、count、accumulate 338P) 使用accumulate 算法将 vector中的 string 元素连接起来 用equal 操作两个序列(339P) 使用 fill 和 fill_n 算法向容器写入元素(340P) 介绍 back_inserter 插入迭代器...

TAOTAO 764

【Primer C++学习笔记】10. 泛型算法

10. 泛型算法 可以用于不同类型的元素和多种容器类型(标准库类型比如vector和list,还包括内置的数组类型) 10.1 概述 10.2 初始泛型算法 10.2.1 只读算法 10.2.2 写容器元素的算法 10.2.3 重排容器元素的算法 10.3 定制操作 10.3.1 向算法传递函数 10.3.2 lambda表达式 10.3.3 lambda捕获和返回 10.3.4 参数绑定 bind 10.4 再探迭代器 10.4.1 插入迭代器 10.4.2 流迭代器 10.

SunYutong_1234的博客 513

电子工程师日记:用STM32F4的DCMI接口驱动OV2640时,那些数据同步的坑我都踩过了

本文分享了使用STM32F4的DCMI接口驱动OV2640摄像头时,在数据同步方面遇到的典型问题与解决方案。作者通过示波器分析PCLK相位、纠正DCMI_CR寄存器中同步信号极性的配置误区,并排查DMA传输瓶颈与FIFO溢出,最终实现了稳定的图像采集。文章为嵌入式工程师提供了宝贵的硬件调试经验与配置清单。

weixin_29189377的博客 156

泛型算法

好久没有更新博客了,最近一直想把我以前的老笔记本换成 Arch + dwm 的样式来使用。现在基本已经弄完了。后面会考虑将我的心得发出来。从0开始一点点的增加自己需要的功能确实很繁琐但是也挺有趣的。闲话就到这里,这篇文章继续记录我学习c++ 11的内容。这篇主要是泛型算法相关的内容 标准容器自身提供的操作少之又少,在多数情况下可能希望对容器进行其他操作,例如排序、删除指定元素等等。标准库容器中并未针对每个容器都定义成员函数来实现这些操作,而是定义了一组泛型算法,它们实现了一组经典算法的公共接口,可以使用于

Masimaro的专栏 239

【论文阅读1】机理引导的残差学习用于电池全生命周期状态监测 | Nature Communications

本文提出了一种机理引导的残差学习框架,用于提升电池全生命周期内荷电状态(SOC)和健康状态(SOH)的监测精度。该方法融合等效电路模型的先验知识与机器学习,设计了修正模型和补偿模型两种通用框架。实验验证表明,该方法在三种不同类型电池数据集上均表现出色,SOC和SOH估计误差较传统方法降低50%以上,且在未见工况下仍保持良好外推能力。模型具有强鲁棒性,在减少训练数据量和降低采样频率时性能稳定,并兼具物理可解释性。该框架无需离线测试和运行中校准,为电池安全监测提供了有效解决方案。

qq_21843433的博客 615

Plant Simulation新手入门:5步搞定生产线物流仿真(附模型库使用技巧)

本文为Plant Simulation新手提供了从零开始构建生产线物流仿真的五步入门指南。通过理念重塑、流程规划、对象连接、参数设置到数据分析的完整流程,帮助用户快速掌握这一强大仿真工具的核心逻辑。文章特别强调了模型库的高效使用技巧,助力工程师在虚拟环境中精准模拟和优化生产系统,提升规划效率。

efc123456的博客 334

C++_泛型算法知识点总结

泛型算法大多数算法都定义在头文件algorithm中。标准库还在头文件numeric中定义了一组数值泛型算法。1.   只读算法1.1.查找对象的算法[1]. find(beg,end, val) 在迭代器beg和end范围内查找val,返回一个迭代器,如果查找成功,返回指向输入序列中第一个等于val的元素;否则返回end。[2].find_if(beg,end, predicate)  find...

Maple的博客 385

创建动态代理对象bean,并动态注入到spring容器中

使用过Mybatis的同学,应该都知道,我们只需要编写mybatis对应的接口和mapper XML文件即可,并不需要手动编写mapper接口的实现。这里mybatis就用到了JDK动态代理,并且将生成的接口代理对象动态注入到Spring容器中。 这里涉及到几个问题。也许有同学会有疑问,我们直接编写好类,加入@Component等注解不是可以注入了吗?或者在配置类(@Configuration)...

lichuangcsdn的博客 3万+

c++ primer读书笔记-第十一章 泛型算法

c++ primer读书笔记-第十一章 泛型算法标准库没有给容器添加大量的功能函数,而是选择提供一组算法,这些算法大都不依赖特定的容器类型,是“泛型”的,可作用在不同类型的容器和不同类型的元素上。例如排序,或者查找某个特定的元素,或者查找最大或最小的元素,等等。大多数算法是通过遍历由两个迭代器标记的一段元素来实现其功能。典型情况下,算法在遍历一段元素范围时,操纵其中的每一个元素。算法通过迭代器访问元

梦想还是要有的 830

Loupe Browser实战指南:解锁10xGenomics单细胞数据的可视化奥秘

本文提供了Loupe Browser的实战指南,帮助用户无需编程即可探索和可视化10xGenomics单细胞数据。文章详细介绍了从数据导入、界面导航到细胞亚群鉴定、差异基因分析的核心操作流程,并分享了高级技巧与避坑指南,是快速上手这一强大可视化工具的必备参考。

weixin_29313423的博客 206

Windows下的Geant4安装教程

本教程将从0开始展示在Windows下如何安装Geant4,包括各种辅助工具(QT、Cmake、Visual Studio)的下载安装,环境变量的配置,以及example的生成等。

weixin_49065278的博客 4106

泛型算法初识

泛型,表明是“普适的”,即不依赖于容器类型,甚至不是容器也可以使用,它提供了一些经典算法的公共接口。 算法所依赖的仅仅是“迭代器”,所有具有迭代器的容器(包括不是容器的string,内置数组类型等)均可使用算法。 如find函数,所有具有迭代器的容器(…)均可以使用这个函数完成查询功能。 但是,对于find函数来说,需要进行比较(==)的操作,这个就依赖于元素类型。不仅仅是find函数,其他的一些...

“时光清浅,不觉多年”的博客 199

知识蒸馏⚗️ | YOLOv5知识蒸馏实战篇

YOLOv5知识蒸馏教程

Coding... 9361

《C++ Primer》学习笔记/习题答案 总目录

文章目录前言专栏C++学习笔记目录第一章 - 快速入门第二章 - 变量和基本类型第三章 - 标准库类型第四章 - 数组和指针第五章 - 表达式第六章 - 语句第七章 - 函数第八章 - 标准 IO 库第九章 - 顺序容器第十章 - 关联容器第十一章 - 泛型算法第十二章 - 类第十三章 - 复制控制第十四章 - 重载操作符与转换第十五章 - 面向对象编程第十六章 - 模板和泛型编程第十七章 - 用...

种树最好的时间是10年前,其次是现在!!! 4万+

74、光谱成像在电子内窥镜及色彩理论中的应用

本文探讨了光谱成像在电子内窥镜中的应用及其与色彩理论的深度融合。通过分析FICE技术、色彩再现模型及胃黏膜光谱测量,展示了光谱信息在提升医学诊断准确性方面的潜力。同时,系统阐述了颜色的物理属性、标准表示方法、同色异谱现象、颜色测量技术(密度法与比色法)以及CIELAB等均匀颜色空间的构建原理。结合流程图与对比表格,梳理了从光信号获取到颜色处理的完整路径,并展望了人工智能与新型视觉模型在未来医疗成像与色彩科学中的发展方向。

g2h3i4j5的博客 152

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【c++ primer 笔记】第10章 泛型算法

大多数算法定义在头文件algorithm中,部分在numeric中这些算法不直接操作容器,而是操作迭代器算法不会改变容器的大小。永远不会执行容器操作大多数算法是通过遍历两个迭代器标记的一段元素来实现其功能。算法永远不会改变底层容器的大小。算法可能改变容器中保存的元素的值,也可能在容器内移动元素,但不能直接添加或者删除元素。......

小呆鸟blog 1164

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【C++ Primer】第十章 泛型算法 (练习)

C++ Primer 5th - 第十章 - 练习

闻韶 705

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++ Primer 总结索引 | 第十章:泛型算法

概述;初始泛型算法:只读算法,写容器元素的算法,重排容器元素算法;定制操作:向算法传递函数,lambda表达式,lambda捕获和返回,参数绑定;再探迭代器:插入迭代器,iostream迭代器,argc/argv/copy_if,反向迭代器;泛型算法结构:5类迭代器,算法形参模式,算法命名规范;特定容器算法

AsherGu的博客 1340

C++primer -泛型算法

inserter(c, p) : 接受一个容器的引用c和迭代器p,返回一个与该容器绑定的插入迭代器,该插入迭代器将赋值的拷贝插入到迭代器所指位置之前(执行的是insert)back_inserter(c) : 接受一个容器的引用c,返回一个与该容器绑定的插入迭代器,该插入迭代器将赋值的拷贝插入到队尾(执行的是push_back)。front_inserter(c):接受一个容器的引用c,返回一个与该容器绑定的插入迭代器,该插入迭代器将赋值的拷贝插入到队首(执行的是push_front)

qq_36369228的博客 2077

C++ primer 泛型算法总结

文章目录1.泛型算法概述2.初始泛型算法2.1只读算法2.2 写容器元素的算法2.3 重排容器元素的算法3.定制操作3.1 向算法传递函数3.2 lambda表达式3.2.1 向lambda传递参数3.2.2 使用捕获列表3.2.3 指定lambda 返回类型3.3 参数绑定4.再探迭代器4.1 插入迭代器4.2 iostream 迭代器4.2.1 istream_iterator 迭代器4.2....

weixin_43282440的博客 854

C++ Primer 初识泛型算法

一种保证算法有足够元素空闰来容纳输出数据的方法是使用撒入迭代器(insert iterator)。插入迭代器是一种向容器中添加元素的迭代器。通常情况,当我们通过一个迭代器向容器元素赋值时,值被赋予迪代器指向的元素。而当我们通过一个插入迭代器赋值时,一个与赋值号右侧值相等的元素被添加到容器中。但是,为了展示如何用算法向容器写入数据,我们现在将使用back_inserter,它是定义在头文件iterator中的一个函数。back_inserter接受一个指向容器的引用,返回一个与该容器绑定的插入迪代器。

专注于C/C++编程语言的博客,如果读者对C/C++语言有任何需要咨询的可以私信联系! 1035

C++ Primer 泛型算法结构

专栏简介:本专栏主要面向C++初学者,解释C++的一些基本概念和基础语言特性,涉及C++标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级程序设计技术。希望对读者有帮助!

专注于C/C++编程语言的博客,如果读者对C/C++语言有任何需要咨询的可以私信联系! 979

C++ primer 第十章 泛型算法

大多数算法都定义在头文件algorithm中。标准库还在头文件numeric中定义了一组数值泛型算法。泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作。

weixin_57884464的博客 564

C++primer-学习心得-第十章-泛型算法

文章目录C++primer-学习心得-第十章-泛型算法10.1 概述练习10.1练习10.210.2 初识泛型算法1. 只读算法练习10.32.写容器元素的算法练习10.63.重排容器元素的算法练习10.910.3定制操作1.向算法传递函数练习10.11练习10.12练习10.132.lambda表达式练习10.14练习10.15练习10.17练习10.18练习10.193.lambda的捕获和返...

xhh22900的博客 531

C++ primer 第10章 泛型算法

文章目录概述findcount初识泛型算法只读算法只读算法accumulate只读算法equal写容器元素的算法算法fill算法fill_nback_inserter算法copy算法replace replace_copy重排容器元素的算法sortuniqueunique_copy定制操作向算法传递函数谓词算法stable_sort算法partitionlambda表达式lambda介绍算法fi...

weixin_43116900的博客 1829

C++ primer第十章—泛型算法

目录10.1 概述10.2 初识泛型算法10.2.1 只读算法10.2.2 写容器元素的算法10.2.3 重排容器元素的算法10.3 定制操作10.3.1 向算法传递函数10.3.2 lambda表达式10.3.3 lambda捕获和返回10.3.4 参数绑定10.4 再探迭代器10.4.1 插入迭代器10.4.2 iostream迭代器10.4.3 反向迭代器10.5 泛型算法结构10.5.1 5类迭代器10.5.2 算法形参模式10.5.3 算法命名规范10.6 特定容器算法 10.1 概述 大多数算

weixin_43684773的博客 626
上一篇: stm32之ucosiii学习后的一个总结
下一篇: c++ Primer学习完后第十一章关联容器的小结
黯黑丶丨枭雄
博客等级 码龄8年 2粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值