C++泛型算法的一些总结
泛型算法的一些总结
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对象时,实参对象的元素被移出并删除。
您可能感兴趣的文章:
- sqlserver 死锁的一些总结
- linux一些命令的总结
- Java class loader的一些总结
- Class.getResource 等等各种获取路径以及一些问题总结
- 开始了,开始了,因为一些原因,开始复习算法以及总结一下工作,很好
- Task的一些用法总结
- H.264中的一些问题总结
- 黑马程序员--08JAVA高级视频网络编程一些总结笔记
- 关于课程设计、毕业设计的一些总结与思考
- UIWebView的一些用法总结
- 关于MS2K一些存储过程的总结
- 我用的一些Node.js开发工具、开发包、框架等总结
- 关于js的一些总结
- JS框架的一些小总结
- MySQL的备份的一些策略和方法的总结
- Myeclipse的一些功能及开发的一些总结
- java中关于递归的一些总结
- iPhone 开发过程中的一些小技术的总结
- 关于VMware6.5下Ubuntu9.04安装VMware tools的一些问题总结
- 一些小功能的总结