扒开腿挺进岳湿润的花苞视频|将军边走边挺进她H树林|挺进朋友人妻张婉莹身体|岳脱得精光让我挺进去视频|第一次挺进莹莹的身体里视频|脱岳裙子从后面挺进去视频

新疆軟件開發(fā)

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

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

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

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

class Add...{
    public:
        int operator()(int v1, int v2)...{
            return v1+v2;
        }
};    它能夠進(jìn)行加法運(yùn)算。例如: int a1=3,a2=1;
Add add;
cout<<add(a1,a2)<<endl;
    結(jié)果將是4。那么這種機(jī)制怎樣用在剛才的問題上呢?因?yàn)閏ount_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)計(jì)大于100的個數(shù),就可以寫成:count_if(ivec.begin(),ivec.end(),Pred(100))。Pred(100)構(gòu)造一個函數(shù)對象,count_if把這個對象依次應(yīng)用到容器中的每一個元素,只要它返回一個真值,計(jì)數(shù)器就加1,新疆軟件開發(fā)網(wǎng)搜集整理 m.jdtbank.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)計(jì)語句就應(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ā)中項(xiàng)目經(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的驗(yàn)證方
    ·各種FOR循環(huán)結(jié)構(gòu)的整理
    ·軟件項(xiàng)目開發(fā)中應(yīng)該考慮那
    ·搜集整理的javascript sel
    ·軟件開發(fā)中項(xiàng)目經(jīng)理有那些
    ·學(xué)習(xí)如何在Lambda表達(dá)式進(jìn)
    ·C++基礎(chǔ)知識:結(jié)構(gòu)體數(shù)據(jù)的
    ·C#實(shí)現(xiàn)短信發(fā)送程序的例子
    ·sun最近修補(bǔ)了一部分java的
    ·rss定制的另外一種實(shí)現(xiàn)方式
    ·delphi實(shí)現(xiàn)利用arp欺騙來實(shí)
    ·基礎(chǔ)學(xué)習(xí):基于WF的流程框
    ·網(wǎng)絡(luò)編程中怎樣得知一次數(shù)
    ·如何逆序輸出單鏈表?
    ·軟件開發(fā)過程中的性能設(shè)計(jì)
    關(guān)于我們 | 軟件開發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開發(fā)網(wǎng) m.jdtbank.com All Rights Reserved 新ICP備14003571號
    新疆軟件開發(fā)總機(jī):0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000
     
    碌曲县| 东源县| 信宜市| 镇康县| 思南县| 简阳市| 凤凰县| 临城县| 上高县| 曲松县| 台湾省| 正定县| 从化市| 富裕县| 松江区| 金堂县| 光山县| 东台市| 繁昌县| 乌兰察布市| 措勤县| 松滋市| 潍坊市| 赤城县| 武宁县| 南木林县| 宝兴县| 平阴县| 龙里县| 镇江市| 扎囊县| 东平县| 蒲城县| 广宗县| 徐汇区| 孝昌县| 平凉市| 福鼎市| 固阳县| 长治市| 公安县|