Re: 關於 stl 和 c++ 的一點問題

看板C_and_CPP作者 (Tangent)時間6年前 (2018/11/30 15:25), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
lambda的出現不只是趨勢,也是一個需求。以排序來說好了。 不管要排序什麼樣的資料,會有差異的也只有比較的部份。然後 C有qsort、C++有std::sort可以用。 C的qsort如下: void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 要用qsort 去排一個 int arr[] = {5, 4, 1, 3, 2} 的陣列,就需要 定義一個函數 int cmp(const void *a, const void *b) { return (const int*)a - *(const int*)b; } 然後這樣 qsort(arr, 5, sizeof(int), cmp); C++98的時候,std::sort 讓排序比qsort更直觀了。而且多了一個方式 傳比較函式。你可以overload operator來傳比較函式。 struct CompareInt { bool operator() (const int &a, const int &b) const { return a < b; } } cmp; std::sort(a, a + 5, cmp); 然而這樣還是有個問題,如果是小程式,寫1、2個比較函式到還好。 如果有很多不一樣的比較函式要寫就會是個麻煩,所以才需要lambda。 有了lambda你可以這樣寫 std::sort(a, a + 5, [](const int &a, const int &b) { return a < b; }); 如此一來,你可以解決命名的問題以及可以比較直觀。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.232.134.137 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1543591534.A.2A6.html
文章代碼(AID): #1S0LPkAc (C_and_CPP)
文章代碼(AID): #1S0LPkAc (C_and_CPP)