C++
Özet - Lambda
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.
Örnek çözümü göster
#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;
}
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.
Örnek çözümü göster
#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;
}
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.
Kendini test et
-
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
- std::count
Cevabı göster
std::function — std::function lambda'yı saklayan genel türdür.
-
count_if çağrısını tamamla
int n = std::____(v.begin(), v.end(), [](int x) { return x % 2 == 0; });
Cevabı göster
int n = std::count_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; });
Sıradaki ders: std::unique_ptr