仿函数的学习:之前在实现优先级队列时在模板那里多传一个参数可以实现直接堆优先级的调整,因为设置大数优先还是小数优先,只是建大堆还是建小堆和相关算法的问题,而大堆算法与小堆算法的不同只是大于小于号的不同,若是仅仅因为这个就重新写一个相似的代码未免有点太冗余了,所以可以引入一个类这个类代替运算符的功能,若算法中需要改变运算符来实现算法的不同要求,直接改变传入的模板达到预期的效果,
对仿函数可以这样理解,定义一个代替大于号的类与都=代替小于号的类,在用到的类的模板部分增加一个参数用来储存仿函数的类,当需要用到仿函数的时候,定义一个模板变量com,用com实现的函数起大于号的作用来代替大于号,这样就完成了仿函数的使用,当算法需要使用小于号时,将类名greater换成less就完成了算法中小于号的替换。STL库中的sort快排函数时就有多传一个参数来决定是排升序还是排降序的效果,这个也是仿函数的效果。
非类型模板参数:在使用模板时不仅可以在参数部分写类型名也可以写非类型,不过这个非类型一般为常量无法改变,这个再类Array中用到过:
这行代码运行结果就会一次生成两个空间大小不同的数组;
模板的特化:
顾名思义,特化就是指特殊情况特殊处理,比如定义一个判断两数相等的模板函数,但是这个函数只能判断自然数,若传参是字符串的话就不能达到判断的效果,于是可以特殊加一个同名的模板函数来处理这种特殊情况:
这样就可以用IsEqual这个函数同时处理自然数和字符串了,同时自定义类型也可以特殊处理
标签:12,复习,大于号,算法,参数,小于号,模板,函数 From: https://www.cnblogs.com/qjwxlj/p/17311871.html