學習使用mem fun mem fun

2021-05-25 21:31:22 字數 1600 閱讀 4207

href="file:///c:/docume~1/admini~1/locals~1/temp/msohtml1/01/clip_filelist.xml" rel="file-list" />

有乙個使用者資訊類

cuserinfo

,包括乙個類成員函式

initdatd

(用於初始化使用者資料),**如下:

class

cuserinfo

};

假設有乙個列表存放所有的使用者資料:

std::listuserlists;

我們需要定期的對

userlists

所有使用者做一次初始化操作,也即是呼叫類成員函式cuserinfo::initdata

普通利用for迴圈實現要求

正常來講,很多人(包括我在內)可能第一時間會想到使用

for迴圈,下面給出例子**;

std::list::iterator iter;

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

使用for

迴圈確實可以實現要求,但很多

c++專家、程式設計手冊和歷史經驗告訴我們,「在處理stl容器的時候,盡量不要自己寫迴圈;」「演算法函式優先使用於迴圈;」「

同樣我也推薦使用下面的

std::for_each

和std::mem_fun_ref

方案。

使用std::mem_fun_ref函式利用

std::for_each

和std::mem_fun_ref

同樣可以實現我們想要的功能,**如下:

for_each(userlists.begin(), userlists.end(), std::mem_fun_ref(&cuserinfo::initdata));

「什麼?」「不可能!」「只有一行**?」

「是的,沒錯!」「只有一行**。」

使用std::mem_fun函式

或許有些人會問,那

mem_fun

怎麼用?用在**?

而有些人會問,如果我是存的

cuserinfo*

,怎麼處理?

其實你們問的也就是下面我要給出的這段**,解決的問題;

std::listuserlists;

for_each(userlists.begin(), userlists.end(), std::mem_fun(&cuserinfo::initdata));

總結

std::mem_fun

和std::mem_fun_ref

所實現的是相同的功能,可以這麼理解之間的差異,mem_fun用於處理容器物件指標,而mem_fun_ref用於處理容器物件實體。

MySQL使用學習使用 mysql學習使用

1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...

學習使用CSDN markdown使用

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

學習使用PIVOT

假設有這樣的乙個需求 有乙個表中儲存了某個部門的各個員工的每一年的各類薪金,記錄儲存格式如 員工姓名 薪金數目 薪金種類 年份 現在要求根據員工的姓名進行查詢,查詢出某些員工各個年份的薪金總數,出來的結果要求 columnname 年份 員工1姓名 員工2姓名 columnvalue 年份 薪金總數...