zoukankan      html  css  js  c++  java
  • C++标准库之泛型算法

    本文中算法都是指泛型算法。

    基本要点:

      1)算法使用迭代器进行操作。

      2)不依赖容器,但容器希望使用算法,就必须提供接口。

      3)通用算法永远不会执行容器操作。操作仅指:更改容器大小的操作。但,容器内部的算法不包括在通用中。

      4)算法使用一个 可调用对象 来对元素进行操作。可 调用对象 通常为函数。

        1,算法通常使用默认操作符 [<],[==],[>] 等。

        2,本质上就是调用一个对象作为算法的比较。

        3,通常的方式有:谓词,操作符重载,lambda表达式。

      5)算法不检查写操作:即算法写入元素值时,程序员必须保证容器已经有足够空间去保存。此错误编译器不报错。

      6)特定容器算法,可以改变容器尺寸。

    谓词:

      1)包括一元谓词和二元谓词。元概念:接收参数的数量。

      2)可以用来代替算法中原有的比较规则。例如:find() 使用谓词代替默认需求操作符[ == ]

      3)谓词可以是:表达式,函数。

      4)谓词有严格的参数数量限制。当超出时,使用lambda表达式。

    lambda表达式: [capture list] (parameter list) -> return type { function body }

      1)capture list:捕获列表。

        1,可以获得 lambda表达式 所在函数的局部变量。

        2,默认为copy值。如果,使用引用捕获,必须保证lambda执行时,变量时存在的。

        3,使用mutable关键字,可以传值使用时,依然改变原变量值。

      2)返回类型必须使用 尾置返回

        1,尾置返回的一个例子:auto func(int i) -> int(*)[10] { function body }  // 返回为一个int数组。大小为10

      3)function body中包含除return外的语句时:

        1,默认返回void,如果需要返回值,请使用 尾置返回。

        2,如果只有一句 return 语句时。会根据return值,返回对应类型。

      5)表示式可以赋值给变量。

        1,不确定:作为变量,还是作为函数指针。个人倾向于指针。

        2,简单使用方式:auto f2 = [&v1] { return ++v1; }

  • 相关阅读:
    计算与软件工程作业一
    《CLSZS团队》:团队项目选题报告
    计算与软件工程第五次作业
    计算与软件工程第四次作业
    计算与软件工程代码规范
    计算与软件工程第三次作业
    计算与软件工程第二次作业
    壹贰叁肆团队项目选题报告
    计算与软件工程 作业五
    计算与软件工程 作业四
  • 原文地址:https://www.cnblogs.com/zheng39562/p/4178387.html
Copyright © 2011-2022 走看看