STL中mem_fun与mem_fun_ref的区别[转]
STL中mem_fun和mem_fun_ref的用法
分類:?C++2006-11-21 09:11?5244人閱讀?評論(8)?收藏?舉報??? 怎么對容器中的所有對象都進行同一個操作?我們可能首先想到的是用循環來實現。
??? 比如有如下的一個類:
{
public:
????intDoSomething()?
????{?
????????//這里以輸出一句話來代替具體的操作
cout?<<"Output?from?method?DoSomething!"<<endl;?
????????return0;?
????};
};
???? 現在定義如下一個vector:
vector<ClxECS*>vECS;for(inti?=0;?i?<13;?i++)
{
????ClxECS?*pECS?=newClxECS;
????vECS.push_back(pECS);
}
??? 如果要對容器vECS中的所有對象都進行DoSomething()的操作,那么下面的循環可能是首先想到的方案:
for(inti?=0;?i?<vECS.size();?i++)????vECS.at(i)->DoSomething();
??? 當然,我們也可以用iterator:
for(vector<ClxECS*>::iterator?it?=vECS.begin();?it?!=vECS.end();?++it)????(*it)->DoSomething();
??? 但是,有很多C++的高手和牛人們都會給我們一個忠告,那就是:在處理STL里面的容器的時候,盡量不要自己寫循環。
??? 那么,我們就只好用STL算法里面的for_each了。
??? 首先,添加如下一個函數:
{
????returnpECS->DoSomething();
}
??? 然后就可以用for_each來實現我們想要的功能:
for_each(vECS.begin(),?vECS.end(),?&DoSomething);??? 說了半天,似乎跟mem_fun和mem_fun_ref沒有什么關系。其實,說那么多都是為了引出mem_fun和mem_fun_ref。在用for_each的時候,如果我們不添加上面的那個函數,該怎么辦呢?
??? 這個時候就該mem_fun和mem_fun_ref隆重登場了。用如下這一行代碼就行了:
??? 不用我多說,大家應該已經明白mem_fun是干什么和該怎么用的了。
????mem_fun_ref的作用和用法跟mem_fun一樣,唯一的不同就是:當容器中存放的是對象實體的時候用mem_fun_ref,當容器中存放的是對象的指針的時候用mem_fun。
轉載于:https://www.cnblogs.com/Purple_Xiapei/archive/2012/05/27/2520483.html
總結
以上是生活随笔為你收集整理的STL中mem_fun与mem_fun_ref的区别[转]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android - ADT本地配置、sd
- 下一篇: 正则表达式攻击