看板 C_and_CPP 關於我們 聯絡資訊
各位板眾好 我有一個小問題想要請教 我想要算某一個檔案下的 所有檔案大小的總和 (不要問我 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)
bleed1979:我以為要填一個function名稱?? 08/07 11:07
softwind:不好意思 可以用給 function object的方式嗎? 08/07 11:08
bleed1979:struct myclass { 08/07 11:10
bleed1979: void operator() (WIN32_FIND_DATA f) { // 統計; } 08/07 11:14
bleed1979:} myobject; 08/07 11:14
bleed1979:統計那邊填n += f.filesize; 如果n是global的話。 08/07 11:21
softwind:可以用 functional裡面的class template兜嘛? 08/07 11:22
softwind:我希望裡面的ftor,是匿名的 08/07 11:23
akasan:why for_each not accumulate ? 08/07 11:29
loveme00835:只能用標準庫嗎? 08/07 12:41
loveme00835:剛剛試過boost::accumulator 似乎沒辦法疊起來用, 不 08/07 12:43
loveme00835:過這問題可以用transform + accumulate 兜起來, 用 08/07 12:44
loveme00835:lambda function 來轉整數 08/07 12:45
loveme00835:我沒辦法用更簡單一點的C++0x Range-based for-loop 08/07 12:49
loveme00835:來實驗, 不過能用boost的話 BOOST_FOREACH 是不錯選擇 08/07 12:50
loveme00835:http://tinyurl.com/27zooo for_each 類似的用法 08/07 13:12
softwind:no 希望只用STL裡的template, 當然用ftor自己寫可以 08/07 13:44
softwind:不過如果可以用 Ruby的each語法一樣 會比較方便一點 08/07 13:45
softwind:so看起來只用stl的ftor+iter 兜不出來加總的ftor 08/07 13:48
loveme00835:自己定義一個巨集阿 XD 08/07 14:22
loveme00835:希望這個有合你用 http://tinyurl.com/2afr62c 08/07 14:48