C++泛型算法笔记(持续更新)

 2024-03-14 03:09:02  阅读 0

相关头文件

通用算法

数值类

三个非常重要的编程假设

算法从不直接对元素进行操作。

该算法通过通用迭代器对元素进行查询工作; 如果使用插入迭代器,确实可以改变元素的大小,但是仍然是通过迭代器实现的,算法本身并不会改变元素的内容。

第三个参数是迭代器算法。 假设该迭代器对应的元素数量与之前的元素数量相同。

只读算法

find(begin, end, val) => 如果找到则返回对应的迭代器,否则返回第二个参数。 (begin, end, ) => 查找第一个满足条件的元素并返回对应的迭代器。 (begin, end, val) => 计算元素的合计值,val为累加器的初始值。 #. equal(begin, end, ) => 比较两个容器中的元素并返回 bool。

写算法

fill(begin, end, val) => 用 val 值填充。 (begin, n, val) => 在begin的位置开始填写n个val值; 请注意,此元素必须有 >=n 个元素才能开始填充。 复制(开始,结束,目标元素)=>复制。 (开始、结束、val、) => 替换。 (begin, end, (), val, ) => 的增强版本,将替换后的结果保存在其中,并保持原始元素不变。 排序(开始,结束)=> 对字典进行排序。 (begin, end) => 对元素进行唯一排序。 请注意,它们必须排序! 返回值也很重要,它是最后一个唯一成员之后的位置。 (begin, end, 目标位置, ) => 使用谓词在迭代器之间转换元素,并将结果保存在目标位置(通常是第一个参数的迭代器)。

插入迭代器

,在元素上调用 ()。

谓词类型

、重载函数调用的类(学名:函数对象)、函数,它们统称为可调用对象。

例如,可调用对象具有其基本类型 int(int, int),这意味着它们接受两个 int 并返回一个 int。

结构

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

必须始终包含捕获列表和函数体,可以省略参数列表和返回类型。

使用它的原因之一是可以通过捕获列表获取更多的局部变量。 尽管通常可以使用函数来代替,但在通用算法中只有一元和二元谓词。 如果有更多,函数将不会收到它应该有的参数。 ,除非使用标准库函数bind。

c 泛型方法_泛型方法重载_泛型方法参数类型

隐式捕获

[&] 默认参考捕获,[=] 默认值捕获。

如果显示隐式混合,则显式和隐式捕获类型必须不同。 默认捕获类型(隐式捕获)是[]的第一个参数。

多变的

默认情况下,[]中捕获的值不会改变其在函数体内的内容。 如果你想改变它,你必须添加它,形式为 [=] () { ++val; }。

标准库函数bind

绑定函数可以成为函数适配器。

形式: auto = 绑定(, )

参数列表包含占位符 std::::_1/_2/_3....

那些不是占位符的参数涉及引用,添加ref()/cref()。

算法格式

alg(求, 结束)

通常有一个谓词作为第三个参数,alg(beg, end, pred)。

一般有dest作为第三个参数,alg(beg, end, dest)。

if, alg(beg, end, dest, pred)。

列表和独特的算法

为什么它是独一无二的? 因为一般的算法效率太低了,毕竟链表上的一些操作只需要改变指针指向即可。

lst.merge(lst2, [comp]) 将lst2合并到lst中,并删除lst2中的元素。 lst.(val) 删除给定的 val 元素。 在高级版本 lst.(pred) 中,删除谓词为 true。 lst.() 反转。 lst.sort([comp/pred]) 排序。 lst.([pred]) 删除重复项。

标准库类型

在上面的谓词类型中,类对象调用有自己的类型,但它不是函数类型。 如果要将其转换为函数类型,则必须使用它。

增加的类型为int(int,int),然后用f=(class/)来指定。

标签: 迭代器 泛型 算法

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码