下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C++Boost.Range與Adapters庫使用詳解目錄一、說明二、適配器練習(xí)
一、說明
本節(jié)敘述關(guān)于Boost.Range和Adeptor兩個(gè)內(nèi)容。
Boost.Range是一個(gè)庫,乍一看,它提供的算法類似于標(biāo)準(zhǔn)庫提供的算法。例如,您會(huì)發(fā)現(xiàn)函數(shù)boost::copy(),它的作用與std::copy()相同。但是,std::copy()需要兩個(gè)參數(shù),而boost::copy()需要一個(gè)范圍。
二、適配器
標(biāo)準(zhǔn)庫提供了幾種可以傳遞謂詞的算法。例如,傳遞給std::count_if()的謂詞確定計(jì)算哪些元素。Boost.Range提供了類似的函數(shù)boost::count_if()。然而,這個(gè)算法只是為了完整性而提供的,因?yàn)锽oost.Range提供了適配器,使得帶有謂詞的算法變得多余。
您可以將適配器視為過濾器。它們基于另一個(gè)范圍返回一個(gè)新范圍。數(shù)據(jù)不一定被復(fù)制。由于范圍只是一對迭代器,因此適配器返回一個(gè)新的對。該對仍可用于迭代原始范圍,但例如可以跳過某些元素。如果將boost::count()與此類適配器一起使用,則不再需要boost::count_if()。不必多次定義算法,以便可以在有或沒有謂詞的情況下調(diào)用它們。
算法和適配器的區(qū)別在于算法迭代一個(gè)范圍并處理數(shù)據(jù),而適配器返回一個(gè)新的范圍新的迭代器它決定了迭代返回的元素。但是,不執(zhí)行迭代。必須首先調(diào)用算法。
示例30.4。使用boost::adaptors::filter()過濾范圍
#includeboost/range/algorithm.hpp
#includeboost/range/adaptors.hpp
#includearray
#includeiterator
#includeiostream
intmain()
std::arrayint,6a{{0,5,2,1,3,4}};
boost::copy(boost::adaptors::filter(a,[](inti){returni}),
std::ostream_iteratorint{std::cout,","});
}
Example30.4
示例30.4使用了一個(gè)可以過濾范圍的適配器。如您所見,適配器只是一個(gè)函數(shù)。boost::adaptors::filter()的第一個(gè)參數(shù)是要過濾的范圍,第二個(gè)參數(shù)是謂詞。示例30.4中的謂詞刪除范圍內(nèi)不大于2的所有數(shù)字。
boost::adaptors::filter()不會(huì)更改范圍a,它會(huì)返回一個(gè)新范圍。由于范圍與一對迭代器沒有太大區(qū)別,因此新范圍也指的是a.但是,新范圍的迭代器會(huì)跳過所有小于或等于2的數(shù)字。
示例30.4將5,3,4寫入標(biāo)準(zhǔn)輸出。
示例30.5。使用鍵()、值()和間接()
#includeboost/range/algorithm.hpp
#includeboost/range/adaptors.hpp
#includearray
#includemap
#includestring
#includeutility
#includeiterator
#includeiostream
intmain()
std::arrayint,3a{{0,1,2}};
std::mapstd::string,int*
m.insert(std::make_pair("a",a[0]));
m.insert(std::make_pair("b",a[1]));
m.insert(std::make_pair("c",a[2]));
boost::copy(boost::adaptors::keys(m),
std::ostream_iteratorstd::string{std::cout,","});
boost::copy(boost::adaptors::indirect(boost::adaptors::values(m)),
std::ostream_iteratorint{std::cout,","});
}
Example30.5
示例30.5使用兩個(gè)適配器boost::adaptors::keys()和boost::adaptors::values()來訪問std::map類型容器中的鍵和值。它還顯示了如何嵌套適配器。因?yàn)閙存儲(chǔ)指向要打印的值的指針,而不是值本身,所以boost::adaptors::values()返回的范圍將傳遞給boost::adaptors::indirect()。當(dāng)范圍由指針組成時(shí),始終可以使用此適配器,但迭代應(yīng)返回指針引用的值。這就是示例30.5將a、b、c、0、1、2寫入標(biāo)準(zhǔn)輸出的原因。
示例30.6。boost::adaptors::tokenize()-字符串適配器
#includeboost/range/algorithm.hpp
#includeboost/range/adaptors.hpp
#includeboost/regex.hpp
#includestring
#includeiostream
intmain()
std::strings="TheBoostC++Libraries";
boost::regexexpr{"[\\w+]+"};
boost::copy(boost::adaptors::tokenize(s,expr,0,
boost::regex_constants::match_default),
std::ostream_iteratorstd::string{std::cout,","});
}
Example30.6
示例30.6引入了一個(gè)字符串適配器。您可以使用boost::adaptors::tokenize()在正則表達(dá)式的幫助下從字符串中獲取范圍。您將一個(gè)字符串和一個(gè)boost::regex類型的正則表達(dá)式傳遞給boost::adaptors::tokenize()。此外,您需要傳遞一個(gè)引用正則表達(dá)式中的組的數(shù)字和一個(gè)標(biāo)志。如果不使用組,則可以傳遞0。標(biāo)志boost::regex_constants::match_default選擇正則表達(dá)式的默認(rèn)設(shè)置。您還可以傳遞其他標(biāo)志
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鉗工培訓(xùn)室規(guī)章制度
- 培訓(xùn)學(xué)校信息管理制度
- 常見意外事件培訓(xùn)制度
- 飲品培訓(xùn)人員管理制度
- 開展小學(xué)校本培訓(xùn)制度
- 新員工培訓(xùn)處罰制度
- 電商人才培訓(xùn)管理制度
- 小學(xué)教師二次培訓(xùn)制度
- 新店培訓(xùn)日常管理制度
- 員工培訓(xùn)形式及制度
- GB/T 17213.4-2015工業(yè)過程控制閥第4部分:檢驗(yàn)和例行試驗(yàn)
- FZ/T 73009-2021山羊絨針織品
- JJF 1069-2012 法定計(jì)量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
- GB∕T 5900.2-2022 機(jī)床 主軸端部與卡盤連接尺寸 第2部分:凸輪鎖緊型
- 2011-2015廣汽豐田凱美瑞維修手冊wdl
- DFMEA編制作業(yè)指導(dǎo)書新版
- KTronics籃輸送式洗碗碟機(jī)操作手冊
- DB35∕T 1844-2019 高速公路邊坡工程監(jiān)測技術(shù)規(guī)程
- 城市管理綜合執(zhí)法局城管執(zhí)法與執(zhí)法程序PPT模板
- 閥門基礎(chǔ)知識(shí)上
- 第二章注射成型工藝與模具結(jié)構(gòu)
評論
0/150
提交評論