C++
STL ile lambda
STL algoritmalarıyla lambda kullanmayı öğrenirsin.
STL ile lambda
STL algoritmaları sıkça lambda alır. std::sort'a üçüncü parametre olarak lambda verirsen özel karşılaştırma yaparsın. Örnek: std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; }); azalan sıralar.
std::find_if ve std::count_if de lambda kullanır. std::find_if koşula uyan ilk öğeyi, std::count_if koşula uyan öğelerin sayısını verir. Örnek: std::count_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; }) ile çift sayıları sayarsın. Lambda, bu algoritmaları çok güçlü kılar; ayrı fonksiyon yazmaya gerek kalmaz.
find_if ve count_if
std::find_if bir koşula uyan ilk öğeyi bulur. Koşul, bool döndüren bir lambda'dır: std::find_if(v.begin(), v.end(), [](int x) { return x > 10; }). Dönen iterator v.end()'e eşitse bulunamamıştır.
std::count_if koşula uyan öğelerin sayısını verir. Örneğin std::count_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; }) çift sayıların adedini döndürür. Bu iki algoritma, STL algoritmalarına lambda geçirmenin en yaygın kullanımlarıdır. Lambda sayesinde koşul doğrudan çağrı yerinde yazılır; ayrı bir fonksiyon tanımlamak gerekmez.
Uygulama Lambda ile azalan sırala
v = {3, 1, 4, 1, 5} vektörünü std::sort ile azalan sırala. Üçüncü parametre olarak [](int a, int b) { return a > b; } lambda'sını ver. Sonuçları bir for döngüsüyle boşlukla yazdır.
Örnek çözümü göster
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {3, 1, 4, 1, 5};
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });
for (int x : v) {
std::cout << x << " ";
}
return 0;
}
Kendini test et
-
Hangi STL algoritması lambda ile karşılaştırma yaparak sıralar?
std::sort(v.begin(), v.end(), [](int a, int b) { ... });
- std::sort
- std::find
- std::count
- std::accumulate
Cevabı göster
std::sort — std::sort lambda ile özel sıralama yapar.
-
Azalan sıralama lambda'sı
std::sort(v.begin(), v.end(), [](int a, int b) { return a ____ b; });
Cevabı göster
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });
-
Algoritmayı kullanımıyla eşle
- std::sort + lambda
- Özel sıralama
- std::find_if + lambda
- Koşula göre ara
- std::count_if + lambda
- Koşula göre say
- [](int x) { return x % 2 == 0; }
- Çift sayı koşulu
Sıradaki ders: std::function