日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c/c++ 重载运算符 函数调用运算符

發布時間:2023/11/29 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c/c++ 重载运算符 函数调用运算符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

重載運算符 函數調用運算符

把一個類的對象a,當成函數來使用,比如a(),所以需要重載operator()方法。重載了函數調用運算符的類的對象,就是函數對象了。

還有什么是函數對象呢???

  • lambda是函數對象
  • std::bind函數的返回值是函數對象
  • 函數是函數對象
  • 函數指針是函數對象

函數對象是做什么用的呢???

  • 在標準算法中使用,比如std::sort(b, e, 函數對象);

標準庫提供了下面的函數對象,它們都是模板形式的,它們放在functional頭文件中

算術關系邏輯
plus<Type>equal_to<Type>logical_and<Type>
minus<Type>not_equal_to<Type>logical_or<Type>
multiplies<Type>greater<Type>logical_not<Type>
divides<Type>greater_equal<Type>
modulus<Type>less<Type>
negate<Type>less_equal<Type>

例子:

#include <iostream> #include <vector> #include <algorithm> #include <string> #include <functional>class 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::vector<int> 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::vector<std::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::vector<int> iv {12,213,123123,434344,213232};int cnt = std::count_if(iv.cbegin(), iv.cend(),std::bind(std::greater<int>(), _1, 1024));std::cout << cnt << std::endl;std::vector<std::string> sv{"pooh", "pooh", "11","pooh","22"};auto idx = std::find_if(sv.cbegin(), sv.cend(),std::bind(std::not_equal_to<std::string>(),_1, "pooh"));std::cout << *idx << std::endl;std::vector<int> iv2 {12,3,12,4,21};std::transform(iv2.cbegin(), iv2.cend(), iv2.begin(),std::bind(std::multiplies<int>(), _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

總結

以上是生活随笔為你收集整理的c/c++ 重载运算符 函数调用运算符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。