CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

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

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

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

Soru
std::sort(v.begin(), v.end(), [](int a, int b) { return a ____ b; });
Cevap
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

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