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; }
C++标准库之泛型算法的更多相关文章
- [C++ Primer] : 第10章: 泛型算法
概述 泛型算法: 称它们为"算法", 是因为它们实现了一些经典算法的公共接口, 如搜索和排序; 称它们是"泛型的", 是因为它们可以用于不同类型的元素和多种容器 ...
- 一起学习Boost标准库--Boost.StringAlgorithms库
概述 在未使用Boost库时,使用STL的std::string处理一些字符串时,总是不顺手,特别是当用了C#/Python等语言后trim/split总要封装一个方法来处理.如果没有形成自己的com ...
- C++解析(18):C++标准库与字符串类
0.目录 1.C++标准库 2.字符串类 3.数组操作符的重载 4.小结 1.C++标准库 有趣的重载--操作符 << 的原生意义是按位左移,例:1 << 2;,其意义是将整数 ...
- C++标准库(体系结构与内核分析)(侯捷第二讲)
一.OOP和GP的区别(video7) OOP:面向对象编程(Object-Oriented programming) GP:泛化编程(Generic programming) 对于OOP来说,我们要 ...
- stl标准库 iterator_traits
为什么标准库里要有traits? 我们先回忆一下,标准库提供的算法的一些特征: 参数一般包括iterator. 要根据iterator的种类,和iterator包装的元素的类型等信息,来决定使用最优化 ...
- C++标准库的初探
1,操作符 << 的原生意义是按位左移,例: 1 << 2; 其底层的意义是将整数 1 按位左移 2 位,即: 0000 0001 ==> 0000 0100: 2,重 ...
- 32,初探c++标准库
1. 有趣的重载 (1)操作符<<:原义是按位左移,重载“<<”可将变量或常量左移到对象中 重载左移操作符(仿cout类) #include<stdio.h> co ...
- 8、泛型程序设计与c++标准模板库4.标准c++库中的算法
标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板. 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置.迭代器查找元素的位置并将这些信息提供给算法以便算法能够 ...
- STL笔记(6)标准库:标准库中的排序算法
STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...
随机推荐
- ios 异步多线程 获取数据
简介 iOS有三种多线程编程的技术,分别是: (一)NSThread (二)Cocoa NSOperation (三)GCD(全称:Grand Central Dispatch) 这三种编程方式 ...
- 实战 Spring MVC接入支付宝即时到账 (部分代码)
下面就拿我项目中的部分代码来实践一下. 支付请求 首先,是提交表单 fund.jsp(这里我表单只需要用户填交易金额,其他的订单号之类的全部后台生成) <form id="deposi ...
- Unity-碰撞
固定位置和角度 选择项目视图中的 Prefab. 打开检视面板中的 Rigidbody 标签可以看到 Constraints 项. 点击左边的三角形图标, 下面会进一步显示 Freeze Positi ...
- 关于onpropertychange与oninput的兼容问题
关于onpropertychange与oninput的用法,网上一大堆,但还是有不兼容的时候,比如说,我想计下,一个input的值改变了多少次,如果写成兼容写法就为 <!doctype html ...
- ie textarea不支持maxlength textarea限制长度
//ie textarea不支持maxlength $('#verify_note').bind('input propertychange', function() { if (this.value ...
- Oracle中MERGE语句的使用
Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的 ...
- Lucene学习总结之六:Lucene打分公式的数学推导
在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下.因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数. Lucene ...
- checkbox 实现单选效果(html)
note:在html <input> 标签类中的checkbox实现单选效果. 在最近的开发项目中,客户要求使用小方格子实现“单选”功能,显然圆点的radio被out了,只能选择chckb ...
- OS-MAC: An Efficient MAC Protocol for Spectrum-Agile Wireless Networks
IEEE TRANSACTIONS ON MOBILE COMPUTING, VOL. 7, NO. 8, AUGUST 2008 正如之前所说的,这是一个out-of-band local cove ...
- Google谷歌搜索引擎登录网站 - Blog透视镜
建置好了网站之后,为了能提升流量或是增加曝光度,Mix通常会到Google谷歌,用手动登录的方式,登录网站,不久之后,搜索引擎就会派遣蜘蛛机器人,来检索你的网站,等一段时间之后,就会出现在搜索引擎内, ...