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对象时,实参对象的元素被移出并删除。
您可能感兴趣的文章
- 04-02c语言没有round函数 round c语言
- 01-10深入理解C++中常见的关键字含义
- 01-10使用C++实现全排列算法的方法详解
- 01-10深入第K大数问题以及算法概要的详解
- 01-10c++中inline的用法分析
- 01-10深入N皇后问题的两个最高效算法的详解
- 01-10用C++实现DBSCAN聚类算法
- 01-10深入全排列算法及其实现方法
- 01-10全排列算法的非递归实现与递归实现的方法(C++)
- 01-10C++大数模板(推荐)
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10delphi制作wav文件的方法
- 01-11ajax实现页面的局部加载
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 04-02jquery与jsp,用jquery
- 01-10C#中split用法实例总结
- 01-10SublimeText编译C开发环境设置
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05dedecms(织梦)副栏目数量限制代码修改