巴中做网站 微信开发,网站建设 山西,做360手机网站快速排,东莞网站建设网站推广价钱重载运算符 函数调用运算符 把一个类的对象a#xff0c;当成函数来使用#xff0c;比如a()#xff0c;所以需要重载operator()方法。重载了函数调用运算符的类的对象#xff0c;就是函数对象了。 还有什么是函数对象呢#xff1f;#xff1f;#xff1f; lambda是函数对…重载运算符 函数调用运算符 把一个类的对象a当成函数来使用比如a()所以需要重载operator()方法。重载了函数调用运算符的类的对象就是函数对象了。 还有什么是函数对象呢 lambda是函数对象std::bind函数的返回值是函数对象函数是函数对象函数指针是函数对象那函数对象是做什么用的呢 在标准算法中使用比如std::sort(b, e, 函数对象);标准库提供了下面的函数对象,它们都是模板形式的它们放在functional头文件中 算术关系逻辑plusTypeequal_toTypelogical_andTypeminusTypenot_equal_toTypelogical_orTypemultipliesTypegreaterTypelogical_notTypedividesTypegreater_equalTypemodulusTypelessTypenegateTypeless_equalType例子 #include iostream
#include vector
#include algorithm
#include string
#include functionalclass LineStr{
public:LineStr(std::istream in std::cin) : is(in){}std::string operator()(){std::string str;std::getline(is, str);return is ? str : std::string();}
private:std::istream is;
};class Isequ{
public:Isequ(int i 0) : val(i){}bool operator()(int t){return val t;}
private:int val;
};class StableSort{
public:bool operator()(const std::string a, const std::string b){return a.size() b.size();}
};class SizeCmp{
public:SizeCmp(std::size_t s) : sz(s){}bool operator()(const std::string str)const{return str.size() sz;}
private:std::size_t sz;
};int main(){/*LineStr ls;std::cout ls() std::endl;*//*std::vectorint vi{23,3,5,6,78,3};Isequ iq(3);std::replace_if(vi.begin(), vi.end(), iq, 9);for(int i : vi)std::cout i ;std::cout std::endl;*//*std::vectorstd::string vs{1234, 123, a, bc};//stable_sort(vs.begin(), vs.end(), [](const std::string a,// const std::string b){// return a.size() b.size();// });//std::stable_sort(vs.begin(), vs.end(), StableSort());StableSort ss;std::stable_sort(vs.begin(), vs.end(), ss);std::size_t sz 2;//auto b std::find_if(vs.cbegin(), vs.cend(), [sz](const std::string a){// return a.size() sz;// });SizeCmp sc(3);auto b std::find_if(vs.cbegin(), vs.cend(), sc);for_each(b, vs.cend(), [](const std::string s){std::cout s ;});std::cout std::endl;for(auto s : vs)std::cout s ;std::cout std::endl;*/using std::placeholders::_1;std::vectorint iv {12,213,123123,434344,213232};int cnt std::count_if(iv.cbegin(), iv.cend(),std::bind(std::greaterint(), _1, 1024));std::cout cnt std::endl;std::vectorstd::string sv{pooh, pooh, 11,pooh,22};auto idx std::find_if(sv.cbegin(), sv.cend(),std::bind(std::not_equal_tostd::string(),_1, pooh));std::cout *idx std::endl;std::vectorint iv2 {12,3,12,4,21};std::transform(iv2.cbegin(), iv2.cend(), iv2.begin(),std::bind(std::multipliesint(), _1, 2));for(auto i : iv2)std::cout i ;std::cout std::endl;}github c/c 学习互助QQ群877684253 本人微信xiaoshitou5854 转载于:https://www.cnblogs.com/xiaoshiwang/p/10176824.html