CodeBlanks Logo Icon CodeBlanks

STL katmanı

STL container ve algoritmalarıyla veri süzme yazarsın.

STL katmanı: vector

Bu derste Task nesnelerini bir std::vector'de toplayacağız. std::vector dinamik bir dizidir; push_back ile eleman eklersin.

Örnek: std::vector<Task> tasks; tasks.push_back(Task("Ödev"));. Bu, görevleri bir listede tutar. tasks[0] ile ilk elemana erişirsin. STL algoritmaları bu vector üzerinde çalışır: std::count_if bir koşulu sağlayan elemanları sayar. Önceki derslerin Task sınıfı ve printItem şablonunu alıp üzerine vector katmanını ekleyeceğiz.

count_if ve lambda

std::count_if bir vector'de bir koşulu sağlayan elemanları sayar. Koşul bir lambda ile verilir.

Örnek: std::count_if(tasks.begin(), tasks.end(), [](const Task& t) { return t.done; });. Burada lambda her görev için t.done'u kontrol eder. Eğer true ise görev tamamlanmış sayılır. Lambda, küçük isimsiz fonksiyonlar yazmanın kısa yoludur. [](const Task& t) { return t.done; } bir Task alır ve done bayrağını döndürür. Bu desen, STL algoritmalarıyla çok yaygındır.

Uygulama Vector'e görev ekle ve tamamlandı say

Başlangıç kodundaki Task sınıfı ve printItem şablonunun ardına main içinde bir std::vector<Task> oluştur. Üç görev ekle (Ödev, Spor, Kitap). tasks[0].done = true; ile ilkini tamamla. std::count_if ile tamamlanan sayısını bul ve std::cout ile yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

class Task {
public:
    std::string title;
    bool done;
    Task(std::string t) : title(t), done(false) {}
};

template <typename T>
void printItem(const T& item) {
    std::cout << item;
}

int main() {
    // Vector'e üç görev ekle, birini tamamla, say ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

class Task {
public:
    std::string title;
    bool done;
    Task(std::string t) : title(t), done(false) {}
};

template <typename T>
void printItem(const T& item) {
    std::cout << item;
}

int main() {
    std::vector<Task> tasks;
    tasks.push_back(Task("Ödev"));
    tasks.push_back(Task("Spor"));
    tasks.push_back(Task("Kitap"));
    tasks[0].done = true;
    int n = std::count_if(tasks.begin(), tasks.end(),
        [](const Task& t) { return t.done; });
    std::cout << n;
    return 0;
}

Beklenen çıktı

1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Parçayı rolüne eşle

Kavram Anlamı
std::vector<Task> Görev listesi
push_back Eleman ekleme
tasks[0] İlk eleman
std::count_if Koşula göre sayma

2 vector tanımını tamamla

Soru
std::____<Task> tasks;
Cevap
std::vector<Task> tasks;

Açıklama: std::vector dinamik dizidir.

3 std::count_if ne yapar?

main.cpp
std::count_if(tasks.begin(), tasks.end(),
    [](const Task& t) { return t.done; });
  • Koşulu sağlayanları sayar Doğru cevap
  • Vector'ü siler
  • İlk elemanı verir
  • Vector'ü sıralar

Açıklama: count_if koşulu sağlayan elemanları sayar.

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