中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

阿里巴巴做網(wǎng)站找誰泰州百度seo公司

阿里巴巴做網(wǎng)站找誰,泰州百度seo公司,市場營銷策劃屬于什么行業(yè),公司變更地址需要多少費(fèi)用文章目錄 包裝器1、functional2、綁定 這一篇比較簡短,只是因?yàn)楹笠獙懏惓:椭悄苤羔?amp;#xff0c;所以就把它單獨(dú)放在了一篇博客,后面新開幾篇博客來寫異常和智能指針 包裝器 1、functional 包裝器是一個(gè)類模板,對可調(diào)用對象類型進(jìn)行再封裝…

文章目錄

  • 包裝器
    • 1、functional
    • 2、綁定


這一篇比較簡短,只是因?yàn)楹笠獙懏惓:椭悄苤羔?#xff0c;所以就把它單獨(dú)放在了一篇博客,后面新開幾篇博客來寫異常和智能指針

包裝器

1、functional

包裝器是一個(gè)類模板,對可調(diào)用對象類型進(jìn)行再封裝適配,可調(diào)用對象,比如函數(shù)指針,lambda等。包裝器的頭文件是functional。

template <class T> function;
template <class Ret, class... Args>
class function<Ret(Args...)>
模板參數(shù)說明:
Ret:被調(diào)用函數(shù)的返回類型
Args...:被調(diào)用函數(shù)的形參

實(shí)際使用

int f(int a, int b)
{cout << "f" << endl;return a + b;
}struct Functor
{
public:int operator() (int a, int b){cout << "Functor" << endl;return a + b;}
};int main()
{//int(*pf1)(int, int) = f;函數(shù)指針function<int(int, int)> f1 = f;function<int(int, int)> f2 = Functor();function<int(int, int)> f3 = [](int a, int b) {cout << "lambda" << endl;return a + b; };cout << f1(1, 2) << endl;cout << f2(10, 20) << endl;cout << f3(100, 200) << endl;return 0;
}

三個(gè)int,第一個(gè)是函數(shù)返回值類型,后兩個(gè)是參數(shù)類型。包裝起包裝起來的就可以傳給模板參數(shù)

	map<string, function<int(int, int)>> opFuncMap;opFuncMap["函數(shù)指針"] = f1;opFuncMap["仿函數(shù)"] = Functor();opFuncMap["lambda"] = [](int a, int b) {cout << "lambda" << endl;return a + b;};cout << opFuncMap["lambda"](1, 2) << endl;

看一個(gè)題

逆波蘭表達(dá)式求值

給你一個(gè)字符串?dāng)?shù)組 tokens ,表示一個(gè)根據(jù) 逆波蘭表示法 表示的算術(shù)表達(dá)式。

請你計(jì)算該表達(dá)式。返回一個(gè)表示表達(dá)式值的整數(shù)。

注意:

有效的算符為 ‘+’、‘-’、‘*’ 和 ‘/’ 。
每個(gè)操作數(shù)(運(yùn)算對象)都可以是一個(gè)整數(shù)或者另一個(gè)表達(dá)式。
兩個(gè)整數(shù)之間的除法總是 向零截?cái)?。
表達(dá)式中不含除零運(yùn)算。
輸入是一個(gè)根據(jù)逆波蘭表示法表示的算術(shù)表達(dá)式。
答案及所有中間計(jì)算結(jié)果可以用32位整數(shù)表示。

在這里插入圖片描述

在這里插入圖片描述

之前的寫法

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> st;for(auto& str : tokens){if(str == "+" || str == "-" || str == "/" || str == "*"){int right = st.top();st.pop();int left = st.top();st.pop();switch(str[0]){case '+':st.push(left+right);break;case '-':st.push(left-right);break;case '*':st.push(left*right);break;case '/':st.push(left/right);break;}}else{st.push(stoi(str));}}return st.top();}
};

用包裝器后

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> st;map<string, function<int(int, int)>> opFuncMap = {{"+", [](int a, int b){return a + b; }},{"-", [](int a, int b){return a - b; }},{"*", [](int a, int b){return a * b; }},{"/", [](int a, int b){return a / b; }}};//這里就是map的初始化,用C++11的列表初始化for(auto str : tokens){if(opFuncMap.count(str)){int right = st.top();st.pop();int left = st.top();st.pop();st.push(opFuncMap[str](left, right));}else{st.push(stoi(str));}}return st.top();}
};

包裝器也可以包裝成員函數(shù)。

class Plus
{
public:static int plus1(int a, int b){return a + b;}double plus2(double a, double b){return (a + b) * _rate;}
private:int _rate = 2;
};int main()
{
class Plus
{
public:Plus(int rate = 2):_rate(rate){}static int plus1(int a, int b){return a + b;}double plus2(double a, double b){return (a + b) * _rate;}
private:int _rate = 2;
};int main()
{function<int(int, int)> f1 = Plus::plus1;function<int(Plus, double, double)> f2 = &Plus::plus2;cout << f1(1, 2) << endl;cout << f2(Plus(), 20, 20) << endl;Plus p1(3);cout << f2(p1, 20, 20) << endl;return 0;
}

靜態(tài)成員函數(shù)可以直接調(diào)用,而非靜態(tài)的需要在第一個(gè)位置加上類名,因?yàn)橛衪his指針,然后后面的Plus前加上&,靜態(tài)函數(shù)也可以加上這個(gè)&,使用這個(gè)函數(shù)的時(shí)候,非靜態(tài)需要在第一個(gè)參數(shù)位置放上類的對象,可以是匿名對象,如果在聲明f2時(shí),傳的是*Plus,那么下面調(diào)用時(shí)就必須傳對象的地址,所以就不能傳匿名對象的地址,因?yàn)橛抑禑o法取地址。

包裝器本質(zhì)上是仿函數(shù),f1,f2,f3就是對象,然后調(diào)用operator(),傳過去參數(shù),然后operator()再去調(diào)用對應(yīng)函數(shù),傳類的對象就用對象來調(diào)用,傳指針就指針來調(diào)用。

2、綁定

綁定是一個(gè)函數(shù)模板,用來調(diào)整參數(shù)。綁定是一個(gè)通用的函數(shù)適配器,接受一個(gè)可調(diào)用對象,可調(diào)用對象就是三個(gè),函數(shù)指針、lambda、仿函數(shù),生成一個(gè)新的可調(diào)用對象來適配。

bind函數(shù)第一個(gè)參數(shù)是一個(gè)萬能引用,左右值都可傳,然后后面的是占位符,_1表示第一個(gè)參數(shù),_2表示第二個(gè)參數(shù),以此類推,這些占位符是一個(gè)placeholders空間里。

int Print(int a, int b)
{cout << a << " ";cout << b << endl;
}int main()
{Print(10, 20);auto RP = bind(Print, placeholders::_2, placeholders::_1);RP(10, 20);//再次調(diào)用就換了順序了。return 0;
}

如果bind寫著_1在_2前面,那就沒換順序,要換順序占位符就得對應(yīng)著寫。bind函數(shù)會(huì)返回一個(gè)對象,我們可以用auto來推演類型,還可以用function<void(int, int)>。實(shí)際調(diào)用的還是Print,不過適配器就是套了一個(gè)殼。

綁定真正有用的是改變參數(shù)個(gè)數(shù)

用這段代碼做例子

class Sub
{
public:Sub(int rate):_rate(rate){}int func(int a, int b){return (a - b) * _rate;}
private:int _rate;
};class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> st;map<string, function<int(int, int)>> opFuncMap ={{"+", [](int a, int b) {return a + b; }},{"-", [](int a, int b) {return a - b; }},{"*", [](int a, int b) {return a * b; }},{"/", [](int a, int b) {return a / b; }}};//這里就是map的初始化,用C++11的列表初始化for (auto str : tokens){if (opFuncMap.count(str)){int right = st.top();st.pop();int left = st.top();st.pop();st.push(opFuncMap[str](left, right));}else{st.push(stoi(str));}}return st.top();}
};int main()
{function<int(Sub, int, int)> fSub = &Sub::func;fSub(Sub(1), 10, 20);return 0;
}

這是上面包裝器的寫法。這樣的寫法無法給opFuncMap傳fSub對象,因?yàn)閰?shù)個(gè)數(shù)不一致,這時(shí)候就是綁定的作用體現(xiàn)了。

	function<int(int, int)> fSub = bind(&Sub::func, Sub(1), placeholders::_1, placeholders::_2);fSub(10, 20);

把Sub(1)對象顯式地傳給func函數(shù),順序沒有變,只是第一個(gè)參數(shù)顯示傳,剩下兩個(gè)就從_1開始排順序。也可以對其他參數(shù)來綁定。

	function<int(int, int)> fSub = bind(&Sub::func, placeholders::_1, 10, placeholders::_2);fSub(Sub(1), 20);

本篇gitee

結(jié)束。

http://www.risenshineclean.com/news/30368.html

相關(guān)文章:

  • 網(wǎng)站運(yùn)行與維護(hù)網(wǎng)絡(luò)推廣外包內(nèi)容
  • 網(wǎng)頁上海公司seo工資服務(wù)
  • 免費(fèi)網(wǎng)站開發(fā)軟件平臺(tái)愛站網(wǎng)長尾詞挖掘工具
  • 網(wǎng)站開發(fā)要什么樣的環(huán)境代運(yùn)營公司
  • 網(wǎng)站建設(shè)網(wǎng)站軟文范文
  • 番禺手機(jī)網(wǎng)站制作推廣行者seo
  • 做外貿(mào)網(wǎng)站效果站長是什么級別
  • 網(wǎng)站設(shè)計(jì)與網(wǎng)頁配色實(shí)例精講nba最新新聞新浪
  • 做英文企業(yè)網(wǎng)站多錢錢上海百度推廣官方電話
  • 建設(shè)標(biāo)準(zhǔn) 免費(fèi)下載網(wǎng)站磁力天堂torrentkitty
  • 部落沖突做任務(wù)網(wǎng)站百度熱搜廣告位
  • 給公司做網(wǎng)站銷售怎樣啦網(wǎng)絡(luò)公司品牌推廣
  • 企業(yè)戰(zhàn)略規(guī)劃方案北京seo網(wǎng)絡(luò)推廣
  • 網(wǎng)頁設(shè)計(jì)公司金華關(guān)鍵詞排名優(yōu)化公司外包
  • 網(wǎng)站建設(shè)利益分析合肥網(wǎng)站seo推廣
  • 建立健全制度如何推廣seo
  • 網(wǎng)站建設(shè) 售后服務(wù)seo下拉優(yōu)化
  • 鄭州正規(guī)網(wǎng)站設(shè)計(jì)價(jià)格seo門戶
  • 漳州網(wǎng)站優(yōu)化下載百度導(dǎo)航app
  • 交友網(wǎng)站建設(shè)惠城網(wǎng)站設(shè)計(jì)
  • 任縣企業(yè)做網(wǎng)站怎么推廣淘寶店鋪
  • 織夢手機(jī)網(wǎng)站源碼下載可口可樂軟文范例
  • 淘寶客優(yōu)惠券網(wǎng)站怎么做的google怎么推廣
  • 怎么在網(wǎng)上做公司網(wǎng)站如何創(chuàng)建自己的網(wǎng)址
  • 建設(shè)兵團(tuán)12師教育局網(wǎng)站淘寶一個(gè)關(guān)鍵詞要刷多久
  • wordpress自己寫代碼百度自然排名優(yōu)化
  • 煙臺(tái)龍口網(wǎng)站建設(shè)百度收錄最新方法
  • 天津建設(shè)銀行網(wǎng)站深圳百度推廣代理商
  • 保定建設(shè)信息網(wǎng)站百度外推代發(fā)排名
  • 有一個(gè)網(wǎng)站叫浪什么網(wǎng)站優(yōu)化比較好的公司