<object id="ged8u"></object>
  • <dd id="ged8u"><noscript id="ged8u"></noscript></dd><rp id="ged8u"></rp>
  • <tbody id="ged8u"><noscript id="ged8u"></noscript></tbody>

    新疆軟件開發

    本站首頁 軟件開發 成功案例 公司新聞 公司簡介 客服中心 軟件技術 網站建設
      您現在的位置: 新疆二域軟件開發公司 >> 開發語言 >> 文章正文

    C++函數對象count_if

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

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

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

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

        如果再利用模板技術,則可以應用到各種類型的容器上:

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

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

  • 上一篇文章:

  • 下一篇文章:

  • 相關文章:
    j2se 嵌入式腳本抓取引擎
    NET Framework 2.0 Service Pack 2下載地址
    軟件開發中項目經理有那些職責
    解析.NET中的6各大的安全錯誤
    .NET中Boolean,bool以及String,string之間的區別
    “七分選型,三分軟件”的ERP法則
    在VC 程序中自定義Vista事件日志
    .Net FrameWork 2.0 新增功能 Bulk Copy
    教程:.Net多線程和Windows Forms編程
    語法C# 問關鍵字之:base、this
    軟件技術
    · 開發語言
    · Java技術
    · .Net技術
    · 數據庫開發
    最新文章  
    ·搜集整理的asp.net的驗證方
    ·各種FOR循環結構的整理
    ·軟件項目開發中應該考慮那
    ·搜集整理的javascript sel
    ·軟件開發中項目經理有那些
    ·學習如何在Lambda表達式進
    ·C++基礎知識:結構體數據的
    ·C#實現短信發送程序的例子
    ·sun最近修補了一部分java的
    ·rss定制的另外一種實現方式
    ·delphi實現利用arp欺騙來實
    ·基礎學習:基于WF的流程框
    ·網絡編程中怎樣得知一次數
    ·如何逆序輸出單鏈表?
    ·軟件開發過程中的性能設計
    關于我們 | 軟件開發 | 下載試用 | 客服中心 | 聯系我們 | 友情鏈接 | 網站地圖 | 新疆電子地圖 | RSS訂閱
    版權所有 © 2016 新疆二域軟件開發網 www.vidoe666.cn All Rights Reserved 新ICP備14003571號
    新疆軟件開發總機:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯大廈A-5C 郵編:830000
     
    野花影视大全在线观看免费,野花影视大全在线观看免费高清,小小影视大全在线观看免费观看
    <object id="ged8u"></object>
  • <dd id="ged8u"><noscript id="ged8u"></noscript></dd><rp id="ged8u"></rp>
  • <tbody id="ged8u"><noscript id="ged8u"></noscript></tbody>