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

基本要点:

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

C++标准库之泛型算法的更多相关文章

  1. [C++ Primer] : 第10章: 泛型算法

    概述 泛型算法: 称它们为"算法", 是因为它们实现了一些经典算法的公共接口, 如搜索和排序; 称它们是"泛型的", 是因为它们可以用于不同类型的元素和多种容器 ...

  2. 一起学习Boost标准库--Boost.StringAlgorithms库

    概述 在未使用Boost库时,使用STL的std::string处理一些字符串时,总是不顺手,特别是当用了C#/Python等语言后trim/split总要封装一个方法来处理.如果没有形成自己的com ...

  3. C++解析(18):C++标准库与字符串类

    0.目录 1.C++标准库 2.字符串类 3.数组操作符的重载 4.小结 1.C++标准库 有趣的重载--操作符 << 的原生意义是按位左移,例:1 << 2;,其意义是将整数 ...

  4. C++标准库(体系结构与内核分析)(侯捷第二讲)

    一.OOP和GP的区别(video7) OOP:面向对象编程(Object-Oriented programming) GP:泛化编程(Generic programming) 对于OOP来说,我们要 ...

  5. stl标准库 iterator_traits

    为什么标准库里要有traits? 我们先回忆一下,标准库提供的算法的一些特征: 参数一般包括iterator. 要根据iterator的种类,和iterator包装的元素的类型等信息,来决定使用最优化 ...

  6. C++标准库的初探

    1,操作符 << 的原生意义是按位左移,例: 1 << 2; 其底层的意义是将整数 1 按位左移 2 位,即: 0000 0001  ==> 0000 0100: 2,重 ...

  7. 32,初探c++标准库

    1. 有趣的重载 (1)操作符<<:原义是按位左移,重载“<<”可将变量或常量左移到对象中 重载左移操作符(仿cout类) #include<stdio.h> co ...

  8. 8、泛型程序设计与c++标准模板库4.标准c++库中的算法

    标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板. 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置.迭代器查找元素的位置并将这些信息提供给算法以便算法能够 ...

  9. STL笔记(6)标准库:标准库中的排序算法

    STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...

随机推荐

  1. spring cuowu

    spring常见错误总结 在学习spring过程中遇见了种种不同的异常错误,这里做了一下总结,希望遇见类似错误的同学们共勉一下. 1. 错误一 Error creating bean with nam ...

  2. html5增强元素--续

    progress元素使用例子 <script> ; function progress_demo() { ) { i++; updateProgress(i); setTimeout(pr ...

  3. Lucene学习总结之七:Lucene搜索过程解析

    一.Lucene搜索过程总论 搜索的过程总的来说就是将词典及倒排表信息从索引中读出来,根据用户输入的查询语句合并倒排表,得到结果文档集并对文档进行打分的过程. 其可用如下图示: 总共包括以下几个过程: ...

  4. 更有效率的使用 Visual Studio - 快捷键

    工欲善其事,必先利其器.虽然说Vim和Emacs是神器,但是对于使用Visual Studio的程序员来说,我们也可以通过一些快捷键和潜在的一些功能实现脱离鼠标写代码,提高工作效率,像使用Vim一样使 ...

  5. mac终端 使用摘要

    Root  (拥有对此计算机的所有权限) 查看当前用户:who 切换到root(默认系统是不会使用root的):sudo -s  然后输入密码 更改密码:passwd

  6. NASM mode for Emacs

    NASM mode for Emacs   Quick post for those Emacs users out there.   The common assembler used on GNU ...

  7. 深入理解JS原型链与继承

    我 觉得阅读精彩的文章是提升自己最快的方法,而且我发现人在不同阶段看待同样的东西都会有不同的收获,有一天你看到一本好书或者好的文章,请记得收藏起来, 隔断时间再去看看,我想应该会有很大的收获.其实今天 ...

  8. HttpClient3.1设置header信息

    HttpClient client = new HttpClient(); GetMethod get = new GetMethod(URL); get.setRequestHeader(" ...

  9. C#操作XML文档(XmlDocument、XmlNode、XmlAttribute、SelectSingleNode、SelectNodes、XmlNodeList)

    XML文档是一种通用的文档,这种文档既可以用.config作为后缀也可以用.xml作为后缀.XML文档主要由元素节点和节点的属性共同构成的.它有且仅有一个根节点,其他的节点全部都是根节点的子节点或者子 ...

  10. Linux系统维护修复模式

    基于PXE方式的Linux系统维护工具箱     在安装RedHat Linux系统的过程中,我们知道可以通过PXE方式进行安装,从而解决了无光驱或无安装介质(光盘)来安装操作系统.但是当系统由于某种 ...