假設(shè)需要在指定范圍中找到滿足某個(gè)為此的所有元素。findO和find if是最符合條件的備選算法,但這些算法返回的都是僅引用一個(gè)元素的計(jì)算機(jī)監(jiān)控軟件迭代器。事實(shí)上,沒有一個(gè)標(biāo)準(zhǔn)算法能夠找出所有滿足謂詞的元素,但是自己可以編寫一個(gè)提供這個(gè)功能的版本,稱為find all。
第一個(gè)任務(wù)是定義函數(shù)原型??梢宰裱璫opy if采用的模型。這應(yīng)該是一個(gè)帶有3個(gè)類型參數(shù)的模板化函數(shù):輸入迭代器、輸出迭代器和為此。這個(gè)函數(shù)電費(fèi)參數(shù)為輸入序列的起首尾代器、輸出序列的首迭代器以及謂詞對(duì)象。與copy if一樣,該算法給輸出序列返回一個(gè)迭代器,指向輸出序列中存儲(chǔ)的最后一個(gè)元素后面的元素。
另一種可選方案是忽略輸出迭代器,給輸入序列返回一個(gè)迭代器,遍歷輸入序列中所有匹配的元素,但是這種方案要求編寫自定義的迭代器類。
下一個(gè)任務(wù)是編寫計(jì)算機(jī)監(jiān)控軟件算法的實(shí)現(xiàn)。Find all算法遍歷輸入序列中的所有元素,給每個(gè)元素調(diào)用為此,把匹配元素的迭代器存儲(chǔ)在輸出序列中。
與copy if一樣,該算法也只覆蓋輸出序列中的已有元素,所以確保輸出序列足夠大,以存儲(chǔ)結(jié)果,或者使用迭代適配器,例如下面代碼中的back inserter。找到引用所有匹配的元素后,代碼計(jì)算找到的元素個(gè)數(shù),即matches中迭代器的個(gè)數(shù)。
一些算法的實(shí)現(xiàn)需要迭代器的額外信息。例如,為了確保臨時(shí)值,算法可能需要知道迭代器引用的元素的類型,還有可能需要知道迭代器是雙向訪問的還是隨機(jī)訪問的。
C++提供了一個(gè)名為iterator traits的類模板,以找到這些信息。通過要使用的迭代器類型實(shí)例化iterator traits類模板,然后可以訪問以下5個(gè)typedef。例如,下面的模板函數(shù)聲明了一個(gè)臨時(shí)變量,其類型是IteratorType類型的迭代器引用的類型。注意,在iterator traits這行前面要使用tyoename關(guān)鍵字。訪問基于一個(gè)或多個(gè)模板參數(shù)的類型時(shí),必須顯式地指定typename。在這個(gè)例子中,模板參數(shù)IteratorType用于訪問value type類型。
★關(guān)于WorkWin公司電腦監(jiān)控軟件★
WorkWin的使命是打造Work用途的Windows 電腦系統(tǒng),有效規(guī)范員工上網(wǎng)行為,讓老板知道員工每天在做什么(監(jiān)控包括屏幕、上網(wǎng)在內(nèi)的一舉一動(dòng)),限制員工不能做什么(禁止網(wǎng)購、游戲、優(yōu)盤等)。
WorkWin基于純軟件設(shè)計(jì),非常容易使用,無需添加或改動(dòng)任何硬件,使用一臺(tái)管理機(jī)監(jiān)控全部員工機(jī)電腦。歷經(jīng)南京網(wǎng)亞十余年精心打造,此時(shí)此刻每天都有成千上萬企業(yè)電腦正在運(yùn)行WorkWin,選擇WorkWin選擇“贏”。
WorkWin監(jiān)控首頁 短視頻講解 下載免費(fèi)試用版
版權(quán)所有,南京網(wǎng)亞計(jì)算機(jī)有限公司 。本文鏈接地址: 編寫計(jì)算機(jī)監(jiān)控軟件STL算法