• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    C++之父Bjarne談C++中的STL模板

    發布: 2008-6-02 14:22 | 作者: 不詳 | 來源: csdn | 查看: 119次 | 進入軟件測試論壇討論

    領測軟件測試網 關鍵字:C++ STL模板 Bjarne


      1.2 函數對象

      我將介紹STL使用的一些基本的技術,它會讓你了解:在普通C++機制上建立的STL是如何提供空前的靈活性和性能的。迄今為止,我們所描述的STL框架組件都有些嚴格。每種算法都嚴格地采用標準指定的方法來準確地實現某種功能。例如,我們需要查找一個與自己指定的值相等的元素。實際上,查找一個帶有某些(自己指定的)屬性的元素,例如小于某個給定的值、匹配某個并非簡單相等的值(例如,匹配大小寫無關的字符串或者在允許很小差別的情況下,匹配雙精度數值),是一項很普通的事務。

      下面的例子不是查找值7,我們將查找某些符合條件的值(也就是小于7的值):

    vector::iterator p = find_if(v.begin(),v.end(),Less_than(7));
    if (p != vi.end()) {
     // 我們找到了值小于7 的元素
     // …
    }
    else {
     // vi 沒有值小于 7 的元素
     // …

      Less_than(7)是什么東西呢?它是一個函數對象,它是某個類的對象,該類帶有應用程序操作符(( )),被定義成執行某個函數:

    template struct Less_than {
     T value;
     Less_than(const T& v) :value(v) { }
     bool operator()(const T& v) const { return v

      例如:

    Less_than f(3.14); // Less_than 保存了雙精度值 3.14
    bool b1 = f(3); // b1 為真(3<3.14 是真的)
    bool b2 = f(4); // b2 為假(4<3.14 是假的) 

      從2004年的情況來看,在D&E中沒有提到函數對象是很奇怪的。我們應該使用一個章節來講述它們。甚至于用戶自定義的應用程序操作符(( ))的使用情況也沒有提到,盡管它已經存在很長時間,并且很卓著。例如,它是幾個最初的允許重載的操作符之一(在=之后),它還用于模仿Fortran下標(subscript notation)。

      我們可以編寫一個find()版本,它使用了函數對象,而不是簡單的!=來檢測是否可以找到某個元素。它的名字是find_if():

    template
    In find_if(In first, In last, Pred pred)
    {
     while (first!=last && !pred(*first)) ++first;
     return first;

      我們簡單地用!pred(*first)代替了*first!=val。函數模板find_if()會接受任何能夠把元素值作為參數調用的對象。特別地,我們可以把普通的函數作為它的第三個參數來調用find_if():

    bool less_than_7(int a)
    {
     return 7::iterator p = find_if(v.begin(),v.end(),less_than_7); 

      但是,這個例子顯示了,與函數相比我們為什么更喜歡函數對象:我們可以使用一個(或多個)參數來初始化函數對象,同時函數對象可以保持這些信息供以后使用。函數對象可以保持任何狀態。這樣就可以形成更通用、更優良的代碼。如果我們需要,我們以后可以檢查它的狀態。例如:

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: Bjarne stl 模板 STL

    31/3123>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>