STL katmanı
- C++ kursu
- Orta seviye
- Ders 114/116
- 6 dk
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
#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
#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
std::____<Task> tasks;
std::vector<Task> tasks;
Açıklama: std::vector dinamik dizidir.
3 std::count_if ne yapar?
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.