for each演算法函式

2021-08-10 20:59:50 字數 1637 閱讀 4961

** 

for_each

函式原形

template

class _fn1> inline

_fn1 for_each(_init _first, _init _last, _fn1 _func)

(為了提高可讀性,原形略有修改)

標頭檔案:

說明:

for_each 演算法範圍 [_first, _last) 中的每個元素呼叫函式

_fn1

,並返回輸入的引數

_func

。此函式不會修改序列中的任何元素。

用於刪除

std::list

指標型別元素變數

stl標準模板庫,容器類只負責管理容器元素本身,包括類物件或者指標型別變數;對於指標型別元素,stl容器類不會管理元素的記憶體分配及釋放記憶體問題,請看以下一小段**:

// 定義使用者列表

std::listm_users;

// 新增元素

cuserinfo * user1 = new cuserinfo();

m_users.push_back(user1);

// ...

// 清空

m_users.clear();

請注意,當呼叫

users .clear()之後,將會導致程式記憶體洩露。

作為乙個合格的程式,你立即就會想到以下方法:

std::list::iterator iter;

for (iter=m_users.begin(); iter!=m_users.end(); iter++)

以上**怎麼看都不怎麼順眼,我們可以利用for_each演算法函式實現類似功能:

先定義乙個結構模板,用於刪除模板物件的指標,**如下:

struct

deleteptr

}; 然後修改前面的for()迴圈,**如下:

for_each(m_users.begin(),m_users.end(), deleteptr());

m_users.clear();

最重要一點,定義了deleteptr結構模板後,可以在不同的專案中重用。

如何應用於

std::map

講到這裡,有些人可能開始有點不耐煩了,下面就直接給出**:

struct

deletepair

}; std::map跟std::list處理不一樣,以下**演示了如何在std::map中使用該模板:

// 定義使用者列表

std::map m_users;

// 清空

for_each(m_users.begin(), m_users.end(), deletepair());

m_users.clear();

總結

提供的deleteptr

和deletepair

結構模板,只是用於刪除記憶體,功能並不強大;只是希望通過這二個例子,讓讀者可以學習到如何

利用for_each實現更多的事情,比如迴圈呼叫某個類成員函式(下次提供原始碼例子)等。

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...

C for each函式 for each模板

for each 函式 void for each int int ref 10 int main int argc,char argv for each int array return0 for each模板 function for each inputiterator first,input...