哪吒2之魔童闹海|哪吒2之魔童归来免费观看|哪吒2在线观看|哪吒2魔童闹海电影免费观看|哪吒2免费观看完整版大电影|哪吒1免费观看完整版

新疆軟件開發(fā)

本站首頁 軟件開發(fā) 成功案例 公司新聞 公司簡介 客服中心 軟件技術(shù) 網(wǎng)站建設(shè)
  您現(xiàn)在的位置: 新疆二域軟件開發(fā)公司 >> 開發(fā)語言 >> 文章正文

C++函數(shù)對象count_if

 
   標(biāo)準(zhǔn)庫里的count_if可以統(tǒng)計容器中滿足特定條件的元素的個數(shù)。例如要統(tǒng)計一個整數(shù)vector——ivec中正數(shù)的個數(shù),可以先寫一個返回類型為bool,含有一個int參數(shù)的條件函數(shù): bool pred(int val)...{
    return val>0;
}
    之后可以用count_if(ivec.begin(),ivec.end(),pred)計算出正整數(shù)的個數(shù)。但這個方法有一個明顯的缺陷:如果要統(tǒng)計大于10的個數(shù)、大于100的個數(shù)……就要寫很多個類似的函數(shù),能不能進(jìn)一步抽象?如果能像這樣調(diào)用count_if:count_if(ivec.begin(),ivec.end,pred(n)),就能統(tǒng)計出容器里大于n的個數(shù),那該多好呀。函數(shù)對象提供了這樣一種機(jī)制。

    簡單地說,函數(shù)對象就是一個重載了()運算符的對象,它可以像一個函數(shù)一樣使用。例如這個Add類:

class Add...{
    public:
        int operator()(int v1, int v2)...{
            return v1+v2;
        }
};    它能夠進(jìn)行加法運算。例如: int a1=3,a2=1;
Add add;
cout<<add(a1,a2)<<endl;
    結(jié)果將是4。那么這種機(jī)制怎樣用在剛才的問題上呢?因為count_if的第三個參數(shù)是一個接受一個參數(shù)的函數(shù),所以可以通過一個構(gòu)造函數(shù)將這個參數(shù)傳到對象里,由count_if自動調(diào)用這個函數(shù)對象:

class Pred...{
    private:
        int _val;
    public:
        Pred(int val):_val(val)...{}
        bool operator()(int val)...{
            return val>_val;
        }
};
    于是,要統(tǒng)計大于100的個數(shù),就可以寫成:count_if(ivec.begin(),ivec.end(),Pred(100))。Pred(100)構(gòu)造一個函數(shù)對象,count_if把這個對象依次應(yīng)用到容器中的每一個元素,只要它返回一個真值,計數(shù)器就加1,新疆軟件開發(fā)網(wǎng)搜集整理 www.pg11qqq.com

    如果再利用模板技術(shù),則可以應(yīng)用到各種類型的容器上:

template<typename T>
class Pred...{
    private:
        T _val;
    public:
        Pred(T val):_val(val)...{}
        bool operator()(T val)...{
            return val>_val;
        }
};  這樣,剛才的統(tǒng)計語句就應(yīng)該寫成:count_if(ivec.begin(),ivec.end(),Pred<int>(100))。如果容器是double類型的,只需把尖括號里的int換成double即可。

作者:未知 | 文章來源:未知 | 更新時間:2007-11-19 18:09:08

  • 上一篇文章:

  • 下一篇文章:

  • 相關(guān)文章:
    j2se 嵌入式腳本抓取引擎
    NET Framework 2.0 Service Pack 2下載地址
    軟件開發(fā)中項目經(jīng)理有那些職責(zé)
    解析.NET中的6各大的安全錯誤
    .NET中Boolean,bool以及String,string之間的區(qū)別
    “七分選型,三分軟件”的ERP法則
    在VC 程序中自定義Vista事件日志
    .Net FrameWork 2.0 新增功能 Bulk Copy
    教程:.Net多線程和Windows Forms編程
    語法C# 問關(guān)鍵字之:base、this
    軟件技術(shù)
    · 開發(fā)語言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫開發(fā)
    最新文章  
    ·搜集整理的asp.net的驗證方
    ·各種FOR循環(huán)結(jié)構(gòu)的整理
    ·軟件項目開發(fā)中應(yīng)該考慮那
    ·搜集整理的javascript sel
    ·軟件開發(fā)中項目經(jīng)理有那些
    ·學(xué)習(xí)如何在Lambda表達(dá)式進(jìn)
    ·C++基礎(chǔ)知識:結(jié)構(gòu)體數(shù)據(jù)的
    ·C#實現(xiàn)短信發(fā)送程序的例子
    ·sun最近修補(bǔ)了一部分java的
    ·rss定制的另外一種實現(xiàn)方式
    ·delphi實現(xiàn)利用arp欺騙來實
    ·基礎(chǔ)學(xué)習(xí):基于WF的流程框
    ·網(wǎng)絡(luò)編程中怎樣得知一次數(shù)
    ·如何逆序輸出單鏈表?
    ·軟件開發(fā)過程中的性能設(shè)計
    關(guān)于我們 | 軟件開發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開發(fā)網(wǎng) www.pg11qqq.com All Rights Reserved 新ICP備14003571號
    新疆軟件開發(fā)總機(jī):0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000