• 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; }

  • 相关阅读:
    文件上传之断点续传方案
    WEB项目(B/S系统)打包安装(总结篇)
    FLEX4.0开发流媒体视频播放器(总结篇)
    mysql 从库出现system lock延迟
    mysql与oracle 不同
    操作系统运维查询命令
    centos ifconfig 命令找不到
    bit 与 byte的区别
    mysql 登录socket与TCP
    xhost +
  • 原文地址:https://www.cnblogs.com/zheng39562/p/4178387.html
Copyright © 2020-2023  润新知