wordpress和淘宝客程序,的搜索引擎优化,政务公开网站建设整改方案,去成都最新政策文章目录 一、C的一些思考记录1#xff09;C函数进化#xff08;函数-函数指针-函数模板-仿函数|函数对象-lambda表达式#xff09; 一、C的一些思考记录
1#xff09;C函数进化#xff08;函数-函数指针-函数模板-仿函数|函数对象-lamb… 文章目录 一、C的一些思考记录1C函数进化函数-函数指针-函数模板-仿函数|函数对象-lambda表达式 一、C的一些思考记录
1C函数进化函数-函数指针-函数模板-仿函数|函数对象-lambda表达式
①简单的比较函数
#include iostreamint countMatchElements(int* beg,int* end)
{int result 0;for(;beg!end;beg){if(*beg 20) result;}return result;
}int main()
{int intArray[] { 11,16,21,19,17,30 };//统计大于20的元素数量std::cout countMatchElements(intArray,intArray6) std::endl;return 0;
}②加入函数指针的优化改变传入不同的函数
#include iostreamint countMatchElements(int* beg,int* end,bool(*pred)(const int))
{int result 0;for(;beg!end;beg){if(pred(*beg)) result;}return result;
}//实际比较函数
bool isGreater20(const int val) {return val 20};
bool isGreater25(const int val) {return val 25};
bool isLess10(const int val) {return val 10};int main()
{int intArray[] { 11,16,21,19,17,30 };//优化后的函数用了函数指针std::cout countMatchElements(intArray,intArray6,isGreater20) std::endl;return 0;
}③函数模板进一步优化改变传入的函数参数为不同类型
#include iostream
templatetypename T
int countMatchElements(T* beg,T* end,bool(*pred)(const T))
{int result 0;for(;beg!end;beg){if(pred(*beg)) result;}return result;
}//实际比较函数
bool isGreater20(const int val) {return val 20;}
bool isGreater25(const int val) {return val 25;}
bool isLess10(const int val) {return val 10;}bool isTinyStr(const stdLLstring val) {return val.size() 3;}int main()
{int intArray[] { 11,16,21,19,17,30 };//优化后的函数用了函数指针std::cout countMatchElements(intArray,intArray6,isGreater20) std::endl;return 0;
}④用仿函数进一步优化改变传入的函数参数为不同值之前无论是模板还是函数指针都是写死的
#include iostream
templatetypename Ttypename Pred
int countMatchElements(T* beg,T* end,Pred pred)
{int result 0;for(;beg!end;beg){if(pred(*beg)) result;}return result;
}//仿函数
templatetypename T
struct Greater{T mVal;////explicit只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示explicit Greater(T value):mVal(value) {} //构造函数初始化mValbool operator() (const T val) const { return val mVal;}//重载函数调用运算符
};int main()
{int intArray[] { 11,16,21,19,17,30 };//阈值设置为20Greaterint greater20{20};//不过仿函数无法给函数指针赋值//优化后的函数用了函数指针std::cout countMatchElements(intArray,intArray6,greater20) std::endl;return 0;
}⑤仿函数代码难以阅读可以用lambda表达式改造下
#include iostream
templatetypename Ttypename Pred
int countMatchElements(T* beg,T* end,Pred pred)
{int result 0;for(;beg!end;beg){if(pred(*beg)) result;}return result;
}//仿函数
templatetypename T
struct Greater{T mVal;////explicit只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示explicit Greater(T value):mVal(value) {} //构造函数初始化mValbool operator() (const T val) const { return val mVal;}//重载函数调用运算符
};int main()
{int intArray[] { 11,16,21,19,17,30 };//阈值设置为20//Greaterint greater20{20};//不过仿函数无法给函数指针赋值auto greater20 [](auto val)-bool {return val20;};//优化后的函数用了函数指针std::cout countMatchElements(intArray,intArray6,greater20) std::endl;return 0;
}