C++标准库之泛型算法

本文中算法都是指泛型算法。程序员

 

基本要点:算法

  1)算法使用迭代器进行操做。数组

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

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

  4)算法使用一个 可调用对象 来对元素进行操做。可 调用对象 一般为函数。
指针

    1,算法一般使用默认操做符 [<],[==],[>] 等。对象

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

    3,一般的方式有:谓词,操做符重载,lambda表达式。编译器

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

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

相关文章
相关标签/搜索