[問題] STL for_each 算總和

看板C_and_CPP (C/C++)作者 (software everywhere)時間15年前 (2010/08/07 11:00), 編輯推噓0(0021)
留言21則, 4人參與, 最新討論串1/2 (看更多)
各位板眾好 我有一個小問題想要請教 我想要算某一個檔案下的 所有檔案大小的總和 (不要問我 Why 不用右鍵內容...) so 程式大概像這樣 WIN32_FIND_DATA findData; HANDLE handle = FindFirstFile(...,&findData); vector<WIN32_FIND_DATA> vcFind; do{ vcFind.push_back(findData); }while(FindNextFile( handle )!=0); 這邊很簡單 但是下一步要算 檔案的總和 HOWTO??? like C的寫法 unsigned long total=0; for(vector<WIN32_FIND_DATA>::const_iterator iter=vcFind.begin(); iter!=vcFind.end(); iter++){ n+=iter->nFileSizeLow; } 然後這邊可以得到該層目錄的 total file size. 但是 我想要套用 for_each的方式 不過想不出來正確的表示式... for_each(vcFind.begin(), vcFind.end(), /* 這邊該怎麼填? */ ) 我想用 bind1st( plus<int>(), totaSize ); 可是 WIN32_FIND_DATA 沒有辦法cast成 int... Ruby的話我會寫 vcFind.each{ |find| totalSize+=find.dwFileSizeLow; } 但是轉成 C++ template... sorry~ 我真的是不熟 觀念上一直會卡住... 麻煩板上高手解答 感謝~ -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.253.165.37 ※ 編輯: softwind 來自: 111.253.165.37 (08/07 11:02)

08/07 11:07, , 1F
我以為要填一個function名稱??
08/07 11:07, 1F

08/07 11:08, , 2F
不好意思 可以用給 function object的方式嗎?
08/07 11:08, 2F

08/07 11:10, , 3F
struct myclass {
08/07 11:10, 3F

08/07 11:14, , 4F
void operator() (WIN32_FIND_DATA f) { // 統計; }
08/07 11:14, 4F

08/07 11:14, , 5F
} myobject;
08/07 11:14, 5F

08/07 11:21, , 6F
統計那邊填n += f.filesize; 如果n是global的話。
08/07 11:21, 6F

08/07 11:22, , 7F
可以用 functional裡面的class template兜嘛?
08/07 11:22, 7F

08/07 11:23, , 8F
我希望裡面的ftor,是匿名的
08/07 11:23, 8F

08/07 11:29, , 9F
why for_each not accumulate ?
08/07 11:29, 9F

08/07 12:41, , 10F
只能用標準庫嗎?
08/07 12:41, 10F

08/07 12:43, , 11F
剛剛試過boost::accumulator 似乎沒辦法疊起來用, 不
08/07 12:43, 11F

08/07 12:44, , 12F
過這問題可以用transform + accumulate 兜起來, 用
08/07 12:44, 12F

08/07 12:45, , 13F
lambda function 來轉整數
08/07 12:45, 13F

08/07 12:49, , 14F
我沒辦法用更簡單一點的C++0x Range-based for-loop
08/07 12:49, 14F

08/07 12:50, , 15F
來實驗, 不過能用boost的話 BOOST_FOREACH 是不錯選擇
08/07 12:50, 15F

08/07 13:12, , 16F
http://tinyurl.com/27zooo for_each 類似的用法
08/07 13:12, 16F

08/07 13:44, , 17F
no 希望只用STL裡的template, 當然用ftor自己寫可以
08/07 13:44, 17F

08/07 13:45, , 18F
不過如果可以用 Ruby的each語法一樣 會比較方便一點
08/07 13:45, 18F

08/07 13:48, , 19F
so看起來只用stl的ftor+iter 兜不出來加總的ftor
08/07 13:48, 19F

08/07 14:22, , 20F
自己定義一個巨集阿 XD
08/07 14:22, 20F

08/07 14:48, , 21F
希望這個有合你用 http://tinyurl.com/2afr62c
08/07 14:48, 21F
文章代碼(AID): #1CNCnIK9 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CNCnIK9 (C_and_CPP)