适配器、泛型算法
2013-09-28 19:01
281 查看
容器适配器:在基本容器的基础上通过改变它们的接口来实现特殊的容器,这就是容器适配器。
适配器:利用一种已有的比较通用的数据结构(通过组合而非继承)来实现更加具体的、更加贴近实际应用的数据结构。
标准C++算法:其通用性事通过模板、迭代器、元素符重载及函数对象来实现。作为算法,不必关心所操作的数据对象在容器中的位置,也不必知道容器的类型甚至数据对象的类型,所要做的工作就是“改变迭代器,并按照用户指定的方式,逐个地对迭代器指向的对象进行定制的操作”。
STL提供的泛型算法主要有以下几种:
& 查找算法,如find()、search()、binary_search、find_if()等;
& 排序算法,如sort()、merge()等;
& 数学计算,如accumulate()、inner_product()、partial_sum()等;
& 集合运算,如set_union()、set_intersection()、includes()等;
& 容器管理,如copy()、replace()、transform()、remove()、for_each()等;
& 统计运算,如max()、min()、count()、max_element()等;
& 堆管理,如make_heap()、push_heap()、pop_heap()、sort_heap();
& 比较运算,如equal()等。
泛型算法都是定义于名字空间std::内的函数模板。
泛型算法的参数类型有下列几种:
@ 迭代器,标示容器或区间的范围,以值传递;
@ 谓词,返回bool值的函数对象,指定算法的操作方式,例如find_if()的第三个参数;
@ 函数对象,用户指定要做的操作,例如for_each()的第三个参数;
@ 容器元素,用户指定的基准对象,例如find()的第三个参数。
提示:泛型算法不接受容器对象作为参数,因此它不了解与传入的迭代器关联容器的具体情况,当然它也不能对容器做任何操作(即无法调用容器的方法),除非使用迭代器适配器。因此,必须保证传入的每一对迭代器是有效的,从first可以到达last。
提示:给算法传递迭代器对象时,没有必要使用引用传递,因为迭代器就是指针或是模拟指针,本身开销小。
提示:在使用带有输出迭代器参数的泛型算法时,一定要给输出容器(目标容器)分配足够的空闲空间,否则操作结果不可预料。
提示:很多泛型算法总是假定容器的元素类型定义了operator=()、operator=()、operator!=()、operator<()或operator>()等函数,因此你有义务为你的容器类型定义它们,否则泛型算法将采用元素类型的默认语义或者报错。
适配器:利用一种已有的比较通用的数据结构(通过组合而非继承)来实现更加具体的、更加贴近实际应用的数据结构。
标准C++算法:其通用性事通过模板、迭代器、元素符重载及函数对象来实现。作为算法,不必关心所操作的数据对象在容器中的位置,也不必知道容器的类型甚至数据对象的类型,所要做的工作就是“改变迭代器,并按照用户指定的方式,逐个地对迭代器指向的对象进行定制的操作”。
STL提供的泛型算法主要有以下几种:
& 查找算法,如find()、search()、binary_search、find_if()等;
& 排序算法,如sort()、merge()等;
& 数学计算,如accumulate()、inner_product()、partial_sum()等;
& 集合运算,如set_union()、set_intersection()、includes()等;
& 容器管理,如copy()、replace()、transform()、remove()、for_each()等;
& 统计运算,如max()、min()、count()、max_element()等;
& 堆管理,如make_heap()、push_heap()、pop_heap()、sort_heap();
& 比较运算,如equal()等。
泛型算法都是定义于名字空间std::内的函数模板。
泛型算法的参数类型有下列几种:
@ 迭代器,标示容器或区间的范围,以值传递;
@ 谓词,返回bool值的函数对象,指定算法的操作方式,例如find_if()的第三个参数;
@ 函数对象,用户指定要做的操作,例如for_each()的第三个参数;
@ 容器元素,用户指定的基准对象,例如find()的第三个参数。
提示:泛型算法不接受容器对象作为参数,因此它不了解与传入的迭代器关联容器的具体情况,当然它也不能对容器做任何操作(即无法调用容器的方法),除非使用迭代器适配器。因此,必须保证传入的每一对迭代器是有效的,从first可以到达last。
提示:给算法传递迭代器对象时,没有必要使用引用传递,因为迭代器就是指针或是模拟指针,本身开销小。
提示:在使用带有输出迭代器参数的泛型算法时,一定要给输出容器(目标容器)分配足够的空闲空间,否则操作结果不可预料。
提示:很多泛型算法总是假定容器的元素类型定义了operator=()、operator=()、operator!=()、operator<()或operator>()等函数,因此你有义务为你的容器类型定义它们,否则泛型算法将采用元素类型的默认语义或者报错。
相关文章推荐
- 泛型算法和迭代器适配器对整数排序
- android学习之自定义适配器
- android中适配器的分析
- Android自定义适配器父类继承BaseAdapter,自定义生成对话框工具类
- 设计模式——适配器(Unity3D中的应用)
- 《C++Primer》读书笔记——第10章 泛型算法
- 注意:Fragment的滑动加适配器的,广播会收到多次,需要在适配器里面加type来区分
- recyclerView 的万能适配器
- RecyclerView万能适配器,点击事件,分割线,间距等写法
- Spring MVC系列:(2)视图解析器、URL映射器、适配器
- listview,gridview等可通用的万能适配器,继承此类即可
- 代码优化>>>Android ListView适配器三级优化详解
- 自定义一个基本数组适配器
- viewpager之适配器instantiateItem()和destroyItem()的执行顺序
- ORA-12560: TNS: 协议适配器错误的解决方法
- 适配器(一)
- ThinkPHP5 数据库设计-----之适配器设计模式(二)
- java设计模式之适配器设计模式
- Android中GridView通过自定义适配器(未优化)实现图文视图排列