Özet - Lambda
- C++ kursu
- Orta seviye
- Ders 81/116
- 5 dk
capture, STL ve std::function'ı birleştirerek bir filtre fonksiyonu yazarsın.
Özet - Lambda
Bu grupta lambda'nın ne olduğunu, [](){} sözdizimini, capture modlarını, STL ile kullanımı ve std::function'ı öğrendin. Şimdi bunları birleştirerek bir filtre fonksiyonu yazacağız.
Önce std::count_if ile bir lambda kullanarak çift sayıları sayacağız. Sonra bu lambda'yı bir std::function'da saklayıp yeniden kullanacağız. Bu, lambda + STL + std::function birleşiminin gerçek bir senaryoda nasıl çalıştığını gösterir.
Uygulama Lambda ile çift sayıları say
v = {1, 2, 3, 4, 5, 6} vektöründe std::count_if ile bir lambda kullanarak çift sayıların adedini bul. Lambda: [](int x) { return x % 2 == 0; }. Sonucu std::cout ile yazdır.
Başlangıç kodu
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6};
// std::count_if ve lambda ile çift sayıları say, yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6};
int n = std::count_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; });
std::cout << n;
return 0;
}Beklenen çıktı
3
Uygulama Lambda'yı std::function'da sakla
#include <functional> ekle. std::function<bool(int)> isEven = [](int x) { return x % 2 == 0; }; ile lambda'yı sakla. Sonra std::count_if(v.begin(), v.end(), isEven) ile çift sayıları say ve yazdır.
Başlangıç kodu
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6};
// isEven lambda'sını bir function nesnesinde sakla, count_if ile say
return 0;
}Örnek çözüm
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6};
std::function<bool(int)> isEven = [](int x) { return x % 2 == 0; };
int n = std::count_if(v.begin(), v.end(), isEven);
std::cout << n;
return 0;
}Beklenen çıktı
3
Lambda özet
Lambda ifadeleri C++'ta adsız fonksiyonlardır. [capture](params) -> type { body } sözdizimiyle yazılır. Capture clause dış değişkenleri yakalar: [=] değer, [&] referans ile.
STL algoritmalarıyla güçlü bir ikili oluşturur: std::sort, std::find_if, std::count_if gibi algoritmalar lambda ile özel koşullar alır. std::function ise lambda'yı bir nesnede saklayıp yeniden kullanmayı sağlar. Bir sonraki grupta akıllı işaretçileri öğreneceksin; bu, bellek yönetimini güvenli hale getirecek.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir lambda'yı sonradan çağırmak için saklamak ne kullanılır?
auto f = [](int x) { return x; };- std::sort
- std::find
- std::function Doğru cevap
- std::count
Açıklama: std::function lambda'yı saklayan genel türdür.
2 count_if çağrısını tamamla
int n = std::____(v.begin(), v.end(), [](int x) { return x % 2 == 0; });
int n = std::count_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; });
Açıklama: std::count_if koşula uyan öğeleri sayar.