辅助函数_通用工具__STL
来源:互联网 发布:windows扩展屏幕工具 编辑:程序博客网 时间:2024/06/06 12:52
定义域头文件<algorithm>,算法程序库中内含三个辅助函数。
一,挑选较小值和较大者:
定义于头文件<algorithm>中:
namespace std{ template <class T> inline const T& min(const T& a,const T& b){ return b<a? b:a; }}
namespace std{ template <class T> inline const T& max(const T& a,const T& b){ return a<b? b:a; }}
如果两值相等,通常会返回第一值。不过程序最好不要依赖这一点。
上述两个函数的另一个版本是接受一个额外的template参数作为“比较准则”:
namespace std{ template <class T,class Compare> inline const T& min(const T& a,const T& b,Compare comp){ return comp(b,a)? b:a; }}
namespace std{ template <class T,class Compare> inline const T& max(const T& a,const T& b,Compare comp){ return comp(a,b)? b:a; }}其中,作为“比较准则“的那个参数应该是个函数或仿函数(functor),接受两个参数并进行比较:在某个制定规则下,判断第一个参数是否小于第二参数,并返回判断结果。
二,两值互换
函数swap()用来交换两对象的值,其泛华版本定义于头文件<algorithm>中:
namespace std{ template <class T> inline void swap(T& a,T& b){ T tmp(a); a=b; b=tmp; }}
swap()的最大优势在于,透过template specialization 或 function overloading,我们可以为更复杂的型别提供特殊的实作版本;我们可以交换对象内部成员,不必劳师动众的反复赋值,这无疑将大大节约时间。STL中所有容器以及strings都运用了这项技术。举个例子,有个简单容器,仅仅内含一个array和一个成员(用来指示数组元素数量),那么为它特别实作的swap()可以是这样:
class MyContainer{ private: int* elems; int numElems; public: ... ///implementation of swap() void swap(MyContainer& x){ std::swap(elems,x.elems); std::swap(numElems,x.numElems); ... }};//overloaded global swap() for this typeinline void swap(MyContainer& c1,MyContainer& c2){ c1.swap(c2);//calls implementation of swap()}
这样,调用swap()而非通过反复赋值操作来交换两容器的值,会带来效率上的提升。对于你自己定义的型别,如果确实能够带来效率上的改善,你就应该义不容辞的为它提供swap()的特化版本。
参考资料:<<The C++ Standard Library>>
0 0
- 辅助函数_通用工具__STL
- 九、 通用工具 ----辅助函数
- 用于辅助拼接HQL语句_工具
- 类_类的常用辅助函数
- Java监控工具、调优、调试辅助函数
- Java监控工具、调优、调试辅助函数
- Java监控工具、调优、调试辅助函数
- Java监控工具、调优、调试辅助函数
- 智能指针_通用工具_STL
- 辅助函数
- VBScript的PDF转换工具.4.辅助函数:散列
- VBScript的PDF转换工具.5.辅助函数:路径
- VBScript的PDF转换工具.6.辅助函数:配置文件读取
- 一些工具函数--通用类型转换
- 头文件<cstddef>和<cstdlib>_通用工具_STL
- VCIDE辅助开发工具
- Silverlight辅助开发工具
- iOS 辅助开发工具
- cuda论坛
- 5个大数据实践项目
- java中将数组、对象、Map、List转换成JSON数据
- FreeMarker模板应用
- 史上最简android中使用opencv环境搭建和例程
- 辅助函数_通用工具__STL
- Shell中[和[[的异同
- 样式表
- JavaScript join() 方法来自W3C
- java中String与Date的类型转换
- CSS的hack技巧
- Hql的fetch
- 快数据:大数据发展的下一个起点
- java编程者必须掌握的技术