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

作者: firejox (Tangent)   2018-11-30 23:25:23
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; });
如此一來,你可以解決命名的問題以及可以比較直觀。

Links booklink

Contact Us: admin [ a t ] ucptt.com