CodeBlanks Logo Icon CodeBlanks

Ö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.

Başlangıç kodu

main.cpp
#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

main.cpp
#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

main.cpp
#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

main.cpp
#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?

main.cpp
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

Soru
int n = std::____(v.begin(), v.end(), [](int x) { return x % 2 == 0; });
Cevap
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.

Orta seviye bölümündeki tüm dersler