泛型算法的一些总结

1、每个泛型算法的实现都独立于单独的容器,并且不依赖于容器存储的元素类型。

2、泛型算法从不直接添加或删除元素。

3、与容器的类型无关,只在一点上隐式地依赖元素类型:必须能够对元素做比较运算。A、需要某种遍历集合的方式:能够从一个元素向前移到下一个元素。

B、必须能够知道是否到达了集合的末尾。

C、必须能够对容器中的每一个元素与被查找的元素进行比较。

D、需要一个类型来指示元素在容器中的位置,或者表示找不到该元素。

4、迭代器将算法和容器绑定起来。算法基于迭代器及其操作实现,而并非基于容器操作。

5、使用泛型算法必须包含algorithm头文件

6、通常泛型算法都是在标记容器(或其他序列)内的元素范围的迭代器上操作的,标记范围的两个实参类型必须精确匹配,而迭代器本身必须标记一个范围,第一个迭代器通过不断地处境,必须可以到到达第二个迭代器。

7、String标准库为string对象与char *对象定义了相等(==)操作符。

8、谓词(函数):是做某些检测的函数,返回用于条件判断的类型,指出条件是否成立。函数名可用于函数形参。

9、unique 的使用:该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器,表示无重复的值范围的结束。unique实际上并没有删除任何元素,而是将无重复的元素复制到序列的前端,返回的迭代器指向超出无重复无素范围末端的下一位置。注:由于该算法删除相邻的重复元素,所以在调用此函数之前,要调用sort函数进行排序。

10、关联容器的键是const对象,因此关联容器的迭代器视为支持自减远处的输入迭代器,而不是完整的双向迭代器。

11、泛型算法的结构:

A、通常有一对迭代器标记输入范围。

B、_if 版本的带有一个谓词函数开参,谓词函数用于表示所提供操作的要求,例如排序的规则。

C、_copy 版本多了一个绑定到容器元素类型相同(或可转换)的另一个容器,把一个容器的元素复制到绑定的容器中,并实现算法的操作,但对输入迭代器所标记的容器没有影响。

12、关于list 容器的特有算法。

list 容器上的迭代器是双向的,而不是随机访问类型。由于list 容器不支持随机访问,因此,在此窗口上不能使用使用需要随机访问迭代器的算法sort , 而merge, remove, reverse, unique 等性能也非常低。对于list 对象,应该优先使用list 容器特有的成员版本,而不是泛型算法。

list 特有的算法与其泛型算法版本之间有两个到头重要的差别,list容器特有的操作能添加和删除元素。A、remove和 unique 的list版本修改了其关联的基础容器,真正地删除了指定的元素。B、list容器提供的merge和splice运算会破坏它们的实参。使用merge 的泛型算法版本时,合并的序列将写入目标迭代器指向的对象,而它的两个输入序列保持不变。但是,使用list容器的merge成员函数时,则会破坏它的实参list对象,当实参对象的元素合并到调用merge函数的list对象时,实参对象的元素被移出并删除。

转载于:https://www.cnblogs.com/ljianhui/archive/2012/07/10/2695929.html

C++泛型算法的小总结相关推荐

  1. C++知识点26——使用C++标准库(常用的泛型算法1)

    C++中实现了很多的泛型算法,大约100多个,使用前要添加#include<algorithm> 下面介绍的基本可以满足绝大部分需求,其他的用到再查 一.计数算法 1.count temp ...

  2. 《Essential C++》笔记之设计一个泛型算法(二)

    前文:<Essential C++>笔记之设计一个泛型算法(一) 相关博文:C++头文件<functional>和bind.placeholders占位符使用简单例子 相关博文 ...

  3. 《Essential C++》笔记之设计一个泛型算法(一)

      任务1:用户给予一个整数vector,我们必须返回一个新的vector,其中内含原vector之中小于10的所有数值.一个快速但缺乏弹性的解法是:   任务2:如果用户想找到所有小于11的元素,我 ...

  4. 2 C++标准库(1- IO库、顺序容器和泛型算法)

    2-1 C++标准:IO库.顺序容器和泛型算法 8 IO库 8.1 IO类 8.2 文件输入输出 8.2.1 使用文件流对象 8.2.2 文件模式 8.3 string流 8.3.1 使用istrin ...

  5. 泛型算法----概述,初识泛型算法,定制操作

    一.概述 标准库定义了一组泛型算法:称它们为"算法",是因为它们实现了一些经典算法的公共接口,如排序和搜索:称它们是"泛型",是因为它们可以用于不同类型的元素和 ...

  6. 去除字符串标点 + 泛型算法使用

    问题:读取一个文件(含标点),统计长度小于4的单词个数,并按长度顺序输出,重复单词只输出一次. 考查:去除字符串标点 + 泛型算法使用 思路:1.获取每个单词,存入到vector中去--考查:去除字符 ...

  7. C++ Primer 5th笔记(10)chapter10 泛型算法 :泛型算法结构

    名称 定义 输入迭代器 只读,不写:单遍扫描,只能递增 输出迭代器 只写,不读:单遍扫描,只能递增 前向迭代器 可读写,多遍扫描,只能递增 双向迭代器 可读写,多遍扫描,可递增递减 随机访问迭代器 可 ...

  8. C++ Primer 5th笔记(10)chapter10 泛型算法 :迭代器

    迭代器类别 名称 定义 插入迭代器 这些迭代器被绑定到一个容器上,可用来向容器插入元素 流迭代器 这些迭代器被绑定到输入或输出流上,可用来遍历所有关联的IO流 反向迭代器 这些迭代器向后而不是向前移动 ...

  9. 泛型算法STL中的迭代器,泛型算法,萃取机的一个实现案例

    迭代器介绍: 迭代器其实是一个类,但是因为重载了* ++等指针操作的符号,所以有着和指针类似的共能,对于一个自己写的类,如果想使用迭代器这种功能就得自己写了,STL的标准容器都有迭代器,迭代器作用于, ...

最新文章

  1. seaborn系列 (13) | 点图pointplot()
  2. POJ-2976 Dropping tests 01分数规划
  3. dart系列之:时间你慢点走,我要在dart中抓住你
  4. nginx_hash表
  5. 毕业论文写作Tips
  6. python中属于私有属性的是_Python中的实例属性和私有属性
  7. 博达3956交换机配置手册_网络设备维保浅谈之交换机维保
  8. C语言cJSON库的使用,解析json数据格式
  9. 你们都用什么反编译工具?
  10. bug[应该已经修复了]:红色方框随机丢失(简书安卓2.0beta)
  11. 数字通信系统的性能及可靠性
  12. oracle oem打不开,oracle10g的oem打不开解决办法
  13. masOS上使用Java 3D解决方案
  14. 失败程序员的十年总结
  15. oracle rac 停机,RAC停机重启方案
  16. 尝试Ajax数据爬取微博
  17. POJ:3276-Face The Right Way(线性反转)
  18. 浙江大学计算机学院 金小刚,金小刚-虚拟现实与交互技术研究院
  19. 数据处理案例一之求同存异
  20. 软件测试 | 测试开发 | Git实战(四)| Git分支管理实操,搞定在线合并和本地合并

热门文章

  1. javax.net.ssl.SSLException: closing inbound before receiving peer‘s close_notif---SpringCloud工作笔记111
  2. 微服务升级_SpringCloud Alibaba工作笔记0005---spring gateway非阻塞异步模型
  3. 图像增强(一):randaugment
  4. 经典线程同步 互斥量Mutex的使用分析
  5. 一步一步写算法(之图的保存)
  6. 用汇编的眼光看C++(之虚函数)
  7. 大数据日知录_腾讯T4专家精心整理:java+大数据+机器学习+数据挖掘+算法大集结...
  8. 单片机按键“消抖”的思考
  9. mysql innodb禁用事务_MySQL InnoDB事务中锁问题(三)
  10. python列表迭代器_python迭代器生成器-迭代器和list区别