C++ Primer (第十章:泛型算法)

一丶
因为这些算法只作用于迭代器,而不直接对容器进行操作.
本阶段所学到的一些泛型算法:find()搜索,accmulate()求和,equal()相等判断,fill()、fill_n()赋值,back_insert()插入操作,copy()拷贝,sort()排序,unique()重排并消重复


二丶
reverse是改变容器容量的,并没有改变其大小,用resize()
算法只是产生了一个插入迭代器,然后使用这个迭代器进行插入操作。
知识点1:用一个单一迭代器表示第二个序列的算法都假定第二个序列和第一个序列等长,如果实际中不等长,程序会出现错误
知识点2:fill()算法的使用必须保证容器本身有足够的大小

四丶算法概况
知识点1:泛型算法:算法是因为其实现了一些经典算法的公共接口,排序和搜索。泛型是因为他们可以作用于不同类型的元素和多种容器类型甚至是内置数组。故称泛型算法
知识点2:基本上都定义在algorithm和numeric两个头文件中
知识点3:这些算法一般情况下只作用于迭代器之上,不对容器进行直接操作

五丶lambda表达式用法
知识点1:我们希望对算法进行更多参数的操作,衍生出lambda表达式,一个lambda表达式表示一个可调用代码 单元,它可以定义在函数的内部。表达式的形式:f = [捕获列表](参数列表){函数体},参数列表为空时,()可省略。
知识点2:如果未指定返回内容,则lambda返回void。

知识点3:lambda只有在捕获列表中捕获一个它所在函数的局部变量才能在函数体中使用该变量,lambda可以直接使用定义在函数之外的名字或者局部static变量

六丶lambda捕获
知识点1:lambda的捕获方式:值捕获、引用捕获、隐式捕获,在[]中,
值捕获:被捕获的变量在lambda创建时拷贝
引用捕获:在lambda中使用引用捕获的变量时,实际上所使用的是引用对应的变量,也就可以在lambda函数体内修改该值。但是由于lambda捕获的是局部变量,必须保证函数结束后、lambda所调用的局部变量的地址仍然存在。
隐式捕获:让编译器根据lambda体中的代码推断我们需要使用哪些变量。&表示引用捕获,=表示值捕获。显示捕获与隐式捕获混合使用时,必须捕获方式不同。
知识点2:尽量减少捕获的数据量,避免捕获可能导致的结果,避免引用、指针捕获。
10.3.3节遇到的相关泛型算法:stable_sort()排序时相等长度元素维持原有顺序,partition()对容器进行划分,使得谓词为真的元素排在前面,返回最后一个使谓词为真的元素的后一个位置的迭代器,find_if()查找第一个具有特定大小的元素

七丶
知识点1:值捕获想修改变量的话,可以在参数列表后加mutable进行修改。引用捕获也必须是非const的变量才可以进行修改。

知识点2:若不明显指出返回类型,需要在参数列表之后位置返回类型:->bool。
对于那种只在一两个地方使用的简单操作,lambda是非常有用的。但是若需要在不同的地方使用相同的操作,通常应该定义一个函数。

八丶
bind()函数,头文件为functional,作用是将参数隐式的增多,接受一个可调用 参数,生成一个新的可调用对象。
知识点:bind()作用很多,可以直接颠倒参数的顺序,绑定引用的参数必须使用ret函数和cref函数


九丶
知识点1:几种特殊的迭代器—实际上相当于一个泛型算法,接受一个容器作为参数,产生一个迭代器,将元素插入容器之中
插入迭代器:这些迭代器绑定到容器上,可以用来向容器插入元素
流迭代器:绑定到输入输出流上,用来遍历所有关联的IO流
反向迭代器:向后移动而不是向前移动,出了forward_list其他容器都有
移动迭代器:移动容器中的元素
知识点2:插入器,接受一个容器作为参数,生成一个迭代器,可以向容器中添加元素。++it,it++,*it都不会产生任何效果,只能返回it(插入迭代器),it = t 在it指向的位置插入元素t。
知识点3:插入迭代器分为三种:back_inserter()创建一个使用push_back的迭 代器,front_inserter()创建一个push_front的迭代器,inserter()创建一个insert迭代器,接受两个参数。插入到指定迭代器之前。(前提是容器必须支持push_back()的操作
区别就是其具体的工作过程,front_insert()最为特殊,总是将元素插在容器之首位置。

知识点:unique_copy():拷贝不重复元素,back_insert():插入迭代器(需包含iterator头文件)

十丶
1:知识点1:5种迭代器类别,注重理解即可,主要就是是否可读写,是单边扫描还是多遍扫描,支持递减还是递增操作
知识点2:输入迭代器:可以读取序列中的元素。输出迭代器,看作是输入迭代器的补集,可写。前向迭代器:单向,支持输入输出。双向迭代器:双向,支持读写,还支持递增递减运算符。随机访问迭代器:基本支持所有功能。

2:list:双向迭代器。vector:随机访问迭代器
3:
copy的三个参数,第一二个数输入迭代器,第三个是输出迭代器

reverse肯定是需要双向迭代器的

unique是前向迭代器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值