《C++ primer》第五版 第十章 笔记

泛型算法:算法即因为他们实现了一些经典算法的公共接口,泛型即他们可以用于不用类型的元素很多种容器类型。

大多数算法都定义在algorithm,一部分数值算法定义在头文件numeic中。

find(vec.cbegin(),vec.cend(),val)

迭代器令算法不依赖于容器但是依赖于元素类型

这些算法有一些基本的结构,理解算法最基本的方法就是了解他们是否读取元素,改变元素或者重排元素

只读算法:find,count,accumulate,equal

写容器算法:fill();

插入迭代器:back_inserter()

拷贝:copy

replace,接受两个参数,前两个是迭代器,表示输入序列,后两个一个是要搜索的值,连一个是新值,他将所有等于第一个值的元素替换为第二个值

重排容器元素的算法,sort

unique:重排vector  使得不重复的元素出现在vector的开始部分


定制操作:

谓词:一元谓词,二元谓词

谓词是一个可用的表达式,其结果是能用做条件的值


lambda表达式:

find_if():接受一对迭代器,表示一个范围,其第三个参数是一个谓词,find_if算法对输入序列中的每个元素调用给定的这个谓词,返回第一个使谓词返回非零值的元素。如果不存在,则返回尾迭代器。

lambda表达式是一个可调用的代码单元,可以理解其为一个未命名的内联函数。有一个返回类型,参数列表和一个函数体。可以定义定义在函数内部。

[ 捕获列表 ] (参数列表)->返回类型{ 函数体   }

可以忽略参数列表和返回类型,但是必须有函数体和捕获列表

如果lambda函数体包含任何单一return语句之外的内容,且未指定返回类型,则返回void

不能有默认参数

空捕获列表表明lambda不使用他所在函数中的任何局部变量

一个lambda通过将局部变量包含在其捕获列表中来指定将会使用这些变量。捕获列表只用于局部非static变量

变量的捕获可以是值或者引用

默认情况下,对于一个值被拷贝的变量,lambda不会改变气质,如果我们希望能改变一个被捕获的变量的值,即必须在参数列表首加上关键字mutable

当我们需要为一个lamdba定义返回类型时,必须使用尾置返回类型。即:->

back_inserter,front_inserter和inserter

反向迭代器:

递增一个反向迭代器会移动到前一个元素,递减则是向后移动一个元素。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值