这个月做VC++界面又有些精进,经验值也有所提高,但对于GDI操作还是接触不多,抽点时间又看了十几页C++ Primer,模板的推演、泛型算法部分也是朦胧:主要是没实际应用过,但是不能说是白看了,但对于思维的延伸还是有点帮助。
比如,在泛型算法中函数指针和Inline函数之间的效率比较,对于温习一下inline函数还是不错的。
实际例子-实现字符串排序,这里使用stable_sort算法,同时要求按字符串长度进行排序,下面用less_than函数实现两字符串小于、等于操作:
bool less_than( const string & s1, const string & s2 )
{
return s1.size() < s2.size();
}
然后将函数指针less_than作参数传递给stable_sort,实现排序操作。传递函数指针也同时舍弃了inline,要知道使用inline的函数会在编译时被展开,编译完成后inline函数中的代码直接被“嵌入”当前调用它的块语句中,程序运行时直接执行less_than函数中代码,而不是像调用一般函数时,首先寻找函数地址,然后调用其中代码。如何实现inline函数?最简单的是做一个函数对象(stable_sort可以接受函数指针和对象参数),注意到()操作符被重载,实现比较功能,同时也保留了inline特性:
// 函数对象:小于操作被实现为operator()的一个实例
class LessThan {
public:
??? bool operator() { const string & s1, const string & s2 ) { return s1.size() < s2.size(); }
};
?