C++ standart kütüphanesi: kapsayıcılar ve algoritmalar
STL kapsayıcılarını ne zaman hangisinin seçileceğini bilerek kullanır, algoritmalar ve yardımcı kütüphanelerle döngü yazmadan güvenli ve hızlı kod üretirsin.
Seviye 201 · 20 ders · 18 pratik lab
Dersler
Kapsayıcılar ayrıntılı
- Sıralı kapsayıcılar: vector, deque, list, array
- İlişkisel kapsayıcılar: map, multimap, set
- unordered_map ve kendi özet işlevin
- Kapsayıcı uyarlayıcıları: stack, queue, priority_queue
- İteratör geçersizleşmesi: sessiz bellek hatası
- Kısa görev: beş iş için doğru kapsayıcıyı seç ve ölç
Algoritmalar
- Değiştirmeyen algoritmalar: find_if, all_of, count
- Değiştiren algoritmalar: transform, remove_if, erase
- Sıralama: sort, stable_sort, partial_sort, nth_element
- Sıralı aralıkta arama: lower_bound ve equal_range
- Sayısal algoritmalar: accumulate, reduce, iota
- Küme ve öbek algoritmaları
- Kısa görev: günlükte en sık görülen hatalar
Yardımcılar
- pair, tuple ve yapılandırılmış bağlama
- İşlev nesneleri, std::function ve bind
- chrono ile süre ölçmek ve random kütüphanesi
- std::filesystem ile dosya ağacını gezmek
- std::regex ile desen eşleme
- Kısa görev: klasör boyut raporu
Bitirme
- Bitirme görevi: STL ile sorgulanabilir varlık envanteri
Pratik lablar
- Son komutları deque ile tutmak: En son on komutu tutan, yenisi gelince en eskisini atan geçmiş sınıfını std::deque ile yaz.
- Aynı güne birden çok randevu saklamak: Lavinya Klinikleri'nin randevularını multimap ile güne göre sakla; equal_range ile bir günün tüm randevularını saat sırasıyla döndür.
- Beş iş için doğru kabı seçip ölçmek: Beş farklı erişim deseninde vector, list, deque, set ve unordered_set'i ölç; her iş için en hızlısını seç ve seçimini sürelerle doğrula.
- Destek kayıtlarını önceliğe göre işlemek: priority_queue ile kayıtları önceliğe, eşitlikte geliş sırasına göre çıkaran kuyruğu yaz.
- Bileşik anahtar için özet işlevi yazmak: Bina ve oda numarasından oluşan anahtar için özet ve eşitlik işlevlerini yaz; unordered_map'te çakışmaların makul kaldığını ölç.
- Yığın ve kuyrukla iş bağımlılıklarını çözmek: İç içe iş gruplarını yığınla ayrıştır, hazır işleri kuyrukla sırala ve döngüsel bağımlılıkta anlaşılır hata ver.
- Sil-kaldır deyimiyle süzmek: Süresi dolan oturumları vektörden erase ve remove_if ile tek geçişte kaldıran fonksiyonu yaz.
- Büyüyen vektörde geçersizleşen başvuruyu bulmak: push_back sonrası eski elemana tutulan başvuruyu kullanan kodu bul; indis ya da reserve ile düzelt ve ASan testini geç.
- Gezerken silinen map'te çökmeyi gidermek: Önbellek temizliği sırasında geçersiz yineleyiciyle ilerleyen döngüyü erase'in dönüş değerini kullanarak onar ve rastgele silme desenleriyle testleri geç.
- Kayıtları all_of ve any_of ile denetlemek: Sipariş listesinde tüm tutarların pozitif olduğunu ve iade içerip içermediğini all_of, any_of ve find_if ile denetleyen fonksiyonları yaz.
- Yanıt sürelerinin yüzdelik değerini bulmak: Tam sıralama yapmadan nth_element ile doksan beşinci yüzdeliği ve partial_sort ile en yavaş on isteği bul.
- Sıralı aralıkta fiyat dilimi aramak: Yanlış karşılaştırıcı yüzünden kimi fiyatlarda hatalı dilim döndüren lower_bound ve equal_range kullanımını düzelt; sınır değer testlerini geç.
- Sepet toplamını accumulate ile hesaplamak: Ürün yapılarından oluşan sepetin toplamını ve en pahalı kalemini accumulate ve max_element ile hesapla.
- İki erişim listesinin farkını çıkarmak: Sıralı iki kullanıcı listesinden set_difference ve set_intersection ile eklenen, çıkarılan ve ortak kullanıcıları üret.
- Akan veriden en büyük K değeri tutmak: Milyonlarca ölçümün en büyük K tanesini push_heap ve pop_heap ile sabit bellekte tut; sonuçların tam sıralamayla aynı olduğunu rastgele testlerle göster.
- Yapılandırılmış bağlamayla çoklu değer döndürmek: En küçük, en büyük ve ortalamayı tuple ile döndüren fonksiyonu yaz ve çağıran tarafta yapılandırılmış bağlamayla ayır.
- Klasör boyut raporu çıkarmak: std::filesystem ile bir ağacı gez, her alt klasörün toplam boyutunu hesapla ve erişilemeyen girdileri atlayıp sayarak raporla.
- Günlükten alanları regex ile çıkarıp süresini ölçmek: std::regex ile günlük satırlarından zaman ve düzey alanlarını çıkar; chrono ile ölç ve her satırda yeniden derlenen deseni düzelterek süre hedefini tuttur.
Kurs hakkında
STL kapsayıcılarını ne zaman hangisinin seçileceğini bilerek kullanır, algoritmalar ve yardımcı kütüphanelerle döngü yazmadan güvenli ve hızlı kod üretirsin.
Ne öğreneceksin
- Kapsayıcılar ayrıntılı
- Algoritmalar
- Yardımcılar
- Bitirme
Ön koşullar
Aynı yolun 101 düzeyindeki kurslarını bitirmiş olmak ya da o konuları biliyor olmak yeterlidir.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 201 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.