STL ile lambda
- C++ kursu
- Orta seviye
- Ders 79/116
- 5 dk
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.
Başlangıç kodu
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {3, 1, 4, 1, 5};
// std::sort'a lambda vererek azalan sırala ve yazdır
return 0;
}Örnek çözüm
#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;
}Beklenen çıktı
5 4 3 1 1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi STL algoritması lambda ile karşılaştırma yaparak sıralar?
std::sort(v.begin(), v.end(), [](int a, int b) { ... });- std::sort Doğru cevap
- std::find
- std::count
- std::accumulate
Açıklama: std::sort lambda ile özel sıralama yapar.
2 Azalan sıralama lambda'sı
std::sort(v.begin(), v.end(), [](int a, int b) { return a ____ b; });
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });
Açıklama: a > b ile azalan sıralama yapılır.
3 Algoritmayı kullanımıyla eşle
| Kavram | Anlamı |
|---|---|
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 |