for each演算法和transform演算法區別

2022-09-08 10:54:11 字數 954 閱讀 5284

對於for_each()演算法和transform()演算法更多基礎的內容請參考以下兩篇http://文章:

for_each()演算法:點選開啟鏈結

transform()演算法:點選開啟鏈結

首先,for_each()演算法和transform()演算法都是屬於變動性演算法(modifying algorithms),它們都能改變序列中所有元素值,變動性演算法的描述有以下兩點體現:

1.直接改變元素;for_each()和transform()都具有這種能力。

2.複製到另乙個區間的過程中改變元素的值,這種情況下,源區間的值不會發生變化;第二點只有transform()具有這種能力。

這兩種演算法在改變序列中所有元素的方式是不同的:

void square(int &elem)

...for_each(veccollection.begin(), veccollection.end(), square);

int multiplyself(int elem)

...for_each(veccollection.begin(), veccollection.end(), multiplyself);

通過for_each和transform演算法實現可以有助於理解這兩個區別。

//for_each()演算法實現

for (; _chkfirst != _chklast; ++_chkfirst)

//transform演算法實現

for (; _first1 != _last1; ++_first1, ++_first2, ++_dest)

其次,transform()的速度稍微慢些,因為它是將操作返回值賦值給元素,而不是直接變動元素。不過其靈活性比較高,它可以把某個序列複製到目標序列中,同時變動元素內容。transform的第二種形式還可以將兩個源序列中的元素組合結果放到目標區間。

for each演算法函式

for each 函式原形 template class fn1 inline fn1 for each init first,init last,fn1 func 為了提高可讀性,原形略有修改 標頭檔案 說明 for each 演算法範圍 first,last 中的每個元素呼叫函式 fn1 並返回...

STL演算法之for each

轉接自stl演算法 for each 對區間裡每個元素執行相應操作 注 for each 接受乙個操作,操作可改動所接受實參 所以該實參必須以by reference方式傳遞 include include include using namespace std for each 對區間裡每個元素執...

STL演算法之for each

簡單來將,仿函式 functor 就是乙個過載了 運算子的struct或class,利用物件支援operator 的特性,來達到模擬函式呼叫效果的技術。我們平時對乙個集合類遍歷的時候,例如vector,是這樣做的 1 for vector const iterator iter ivec.begin...