第十章 泛型算法

Huan Lee Lv5

算法分类

  • 只读算法:前两个实参往往是两个迭代器

  • 写操作算法

    • 这类算法不检查写操作

    • back_iterator是一个插入迭代器,通过该迭代器进行赋值时,会调用push_back函数

    Untitled

  • 重排元素的算法

定制操作

  • 向算法传递函数(谓词,即可调用的表达式,其返回结果是一个能用作条件的值)

lambda表达式

  • 可调用对象,类似函数和函数指针
  • 可以忽略参数列表和返回类型,但是必须有捕获列表和函数体

Untitled

  • 形参不能有默认初始值

  • 捕获列表表示函数需要捕获的局部变量,通常为空

    • 捕获分为值捕获和引用捕获,可以理解为传入一个常量形参

    • 还有隐式捕获的方式(分别用=和&来表示两种捕获)

  • 指定返回类型时,采用尾置返回类型

  • lambda表达式的等价效果是定义一个函数,但是当捕获列表不为空时,函数需要添加额外的形参,这在固定形参个数的情况下不可行,因此需要functional库下的bind函数

Untitled

  • 其中arg_list就类似于捕获列表,不同点在于arg_list中要以‘_n’的形式声明占位符,那几个占位符对应的实参会传递给callable

    • 占位符声明在std::placeholders中

    • 占位符从_1开始,分别对应callable中的第一个形参,第二个。。。

    • 占位符在arg_list中不一定按顺序排列,更重要的是与callable中形参的对应关系

    • arg_list无法拷贝引用,得使用ref(var),或cref(var)

iostream迭代器

  • 不管是istream还是ostream在声明iterator时都需要指明迭代器类型,之后只能传入对应类型的元素

Untitled

Untitled

反向迭代器

  • 反向迭代器可以调用base成员函数获取正向迭代器

Untitled

Untitled

泛型算法结构

迭代器

Untitled

  • Title: 第十章 泛型算法
  • Author: Huan Lee
  • Created at : 2023-08-20 14:10:47
  • Updated at : 2024-02-26 04:53:15
  • Link: https://www.mirthfullee.com/2023/08/20/notion-第十章 泛型算法-e9d50fc9/
  • License: This work is licensed under CC BY-NC-SA 4.0.