STL Genel Bakış ve Felsefesi
Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 70 / 104.
Standart Şablon Kütüphanesi (STL), yaygın veri yapılarını ve algoritmaları sağlayan şablon tabanlı sınıflar ve fonksiyonlardan oluşan bir koleksiyondur. Öğrendiğiniz şablon kavramları üzerine inşa edilen STL, güçlü bir tasarım felsefesini somutlaştırır: veri depolamayı veri işlemeden ayırmak.
STL, birlikte çalışan üç temel bileşen etrafında organize edilmiştir:
| Bileşen | Amaç | Örnekler |
|---|---|---|
| Kapsayıcılar | Nesne koleksiyonlarını depolar | vector, map, set |
| Yineleyiciler | Kapsayıcı öğelerine erişim sağlar | Giriş, çıkış, rastgele erişim |
| Algoritmalar | Veriler üzerinde işlemler gerçekleştirir | sort, find, transform |
Temel içgörü, algoritmaların konteynerleri doğrudan tanımamasıdır; iteratörler (iterators) aracılığıyla çalışırlar. Bu, tek bir sort algoritmasının vektörler, diziler ve doğru iteratör tipini sağlayan herhangi bir konteyner ile çalıştığı anlamına gelir:
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> nums = {5, 2, 8, 1, 9};
std::sort(nums.begin(), nums.end());
for (int n : nums) {
std::cout << n << " ";
}
// Çıktı: 1 2 5 8 9
}Bu ayrım, karıştırıp eşleştirebileceğiniz anlamına gelir - yeni kod yazmadan herhangi bir algoritmayı herhangi bir uyumlu konteyner ile kullanabilirsiniz. STL, yaygın veri yapılarını yeniden icat etmek yerine problemlere odaklanabilmeniz için savaşta test edilmiş, optimize edilmiş uygulamalar sunar.
Görev
KolayKapsayıcıları (containers), yineleyicileri (iterators) ve algoritmaları birbirinden ayırma şeklindeki STL felsefesini gösteren basit bir veri işleme sistemi kuralım. STL bileşenleriyle çalışan bir yardımcı modül ve bu parçaların nasıl bir araya geldiğini gösteren bir ana program oluşturacaksınız.
İki dosya oluşturacaksınız:
DataProcessor.h: STL'nin tasarım felsefesini gösteren, yineleyiciler aracılığıyla STL kapsayıcılarıyla çalışan yardımcı fonksiyonları tanımlayın.Bir
std::vector<int>&alan ve tüm öğeleri aralarında boşluk bırakarak yazdıran, ardından bir alt satıra geçenprintVectoradında bir fonksiyon oluşturun. Kapsayıcıyı dolaşmak için yineleyicileri (begin()veend()) kullanın.Bir
std::vector<int>&alan, bunustd::sortkullanarak sıralayan, ardından sıralanmış öğeleri aralarında boşluk bırakarak yazdıran ve bir alt satıra geçensortAndPrintadında bir fonksiyon oluşturun.Bir
std::vector<int>&ve aranacak birintdeğeri alanfindElementadında bir fonksiyon oluşturun. Öğeyi bulmak içinstd::findkullanın. Eğer bulunursa,Found: <value>yazdırın. Bulunamazsa,Not found: <value>yazdırın.Bir
std::vector<int>&alan ve tüm öğelerin toplamını döndürengetSumadında bir fonksiyon oluşturun. Bunun için yineleyicilerle basit bir döngü kullanabilirsiniz.main.cpp: Girişleri okuyun ve STL bileşenlerinin birlikte nasıl çalıştığını gösterin.Beş giriş okuyun (her biri ayrı bir satırda):
- Birinci tam sayı
- İkinci tam sayı
- Üçüncü tam sayı
- Dördüncü tam sayı
- Aranacak bir değer
Bir
std::vector<int>oluşturun ve ilk dört tam sayıyı buna ekleyin. Ardından şu adımlarla STL felsefesini gösterin:Original:yazdırın ve ardındanprintVectorfonksiyonunu çağırınSorted:yazdırın ve ardındansortAndPrintfonksiyonunu çağırın- Arama değeriyle
findElementfonksiyonunu çağırın getSumkullanarakSum: <result>yazdırın
Örneğin, 5, 2, 8, 1 ve 8 girişleri için:
Original: 5 2 8 1
Sorted: 1 2 5 8
Found: 8
Sum: 1610, 30, 20, 40 ve 15 girişleri için:
Original: 10 30 20 40
Sorted: 10 20 30 40
Not found: 15
Sum: 100Fonksiyonlarınızın vektörle yineleyiciler aracılığıyla nasıl çalıştığına ve std::sort ile std::find fonksiyonlarının doğru yineleyici türünü sağlayan herhangi bir kapsayıcı üzerinde nasıl işlem yaptığına dikkat edin. STL'nin tasarımının gücü budur — algoritmalar kapsayıcılardan ayrılmıştır ve birbirlerine yalnızca yineleyiciler aracılığıyla bağlanırlar.
Kopya kağıdı
Standart Şablon Kütüphanesi (STL), yaygın veri yapılarını ve algoritmaları sağlayan şablon tabanlı sınıflar ve fonksiyonlar koleksiyonudur. Veri depolamayı veri işlemeden ayırır.
STL'nin üç temel bileşeni vardır:
| Bileşen | Amaç | Örnekler |
|---|---|---|
| Konteynerler | Nesne koleksiyonlarını depolar | vector, map, set |
| İteratörler | Konteyner öğelerine erişim sağlar | Giriş, çıkış, rastgele erişim |
| Algoritmalar | Veriler üzerinde işlemler gerçekleştirir | sort, find, transform |
Algoritmalar doğrudan konteynerlerle değil, iteratörler aracılığıyla çalışır. Bu, tek bir algoritmanın uyumlu herhangi bir konteynerle çalışmasına olanak tanır:
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> nums = {5, 2, 8, 1, 9};
// İteratörleri kullanarak sırala
std::sort(nums.begin(), nums.end());
// İteratörleri kullanarak dolaş
for (int n : nums) {
std::cout << n << " ";
}
// Çıktı: 1 2 5 8 9
}Yaygın iteratör metotları:
begin()- ilk öğeye bir iteratör döndürürend()- son öğeden sonraki konuma bir iteratör döndürür
Yaygın STL algoritmaları:
std::sort(begin, end)- aralıktaki öğeleri sıralarstd::find(begin, end, value)- aralıkta değer arar
Kendin dene
#include <iostream>
#include <vector>
#include "DataProcessor.h"
using namespace std;
int main() {
// Girdiden beş tam sayı oku
int num1, num2, num3, num4, searchValue;
cin >> num1;
cin >> num2;
cin >> num3;
cin >> num4;
cin >> searchValue;
// TODO: Bir vector oluştur ve ilk dört tam sayıyı ona ekle
// TODO: "Original: " yazdır ve printVector fonksiyonunu çağır
// TODO: "Sorted: " yazdır ve sortAndPrint fonksiyonunu çağır
// TODO: Arama değeri ile findElement fonksiyonunu çağır
// TODO: "Sum: " yazdır ve ardından getSum sonucunu ekle
return 0;
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarC++ Build ve DerlemeBaşlık Dosyaları ve Kaynak DosyalarıAd Alanları ve KapsamC++'ta OOP'ye GirişSınıflar ve Nesneler'this' İşaretçisiMetotlar (Üye Fonksiyonlar)Öznitelikler (Veri Üyeleri)Ctor ve Dtor TemelleriÖzet - Basit Hesap Makinesi4Sınıf Özellikleri
Örnek ve Statik ÜyelerGetter ve Setter MetotlarıConst Üye FonksiyonlarMutable Anahtar KelimesiStatik Metotlar ve DeğişkenlerFriend Fonksiyonlar ve SınıflarÖzet - Banka Hesabı Yöneticisi7Kalıtım
Temel KalıtımKalıtım Erişim SeviyeleriCtor ve Dtor Çağrılma SırasıMetot Geçersiz KılmaSanal Fonksiyonlar ve VTableÇoklu KalıtımSanal KalıtımÖzet - Çalışan Hiyerarşisi10STL Genel Bakış
STL Genel Bakış ve FelsefesiSTL KonteynerleriİteratörlerSTL AlgoritmalarıFunctor'lar ve Lambda İfadeleriÖzet - Kelime Frekansı13Tasarım Kalıpları 1. Bölüm
Tasarım Kalıplarına GirişSingleton KalıbıFactory ve Abstract FactoryBuilder KalıbıObserver KalıbıStrategy Kalıbı2Bellek Yönetimi
Stack ve Heap Bellekİşaretçiler ve ReferanslarDinamik Bellek (new/delete)C++'ta Akıllı İşaretçilerC++'ta RAIIÖzet - Dinamik Dizi Yöneticisi5Kapsülleme
C++'da Erişim BelirleyicilerDerinlemesine Erişim BelirleyicilerBilgi GizlemeStruct vs Classİç İçe ve Dahili SınıflarÖzet - Öğrenci Kayıt Sistemi8Çok Biçimlilik
Derleme ve Çalışma Zamanı Çok BiçimliliğiFonksiyon Aşırı YüklemeSanal Fonksiyonlara Yeniden BakışSaf Sanal FonksiyonlarSoyut SınıflarC++'ta Arayüz TasarımıDynamic Casting ve RTTIÖzet - Şekil Hesaplayıcı3Yapıcılar ve Yıkıcılar
Varsayılan YapıcıParametreli YapıcıKopya YapıcıTaşıma YapıcısıYapıcı İlklendirme ListeleriTemsilci YapıcılarYıkıcılara Derinlemesine BakışÜç / Beş / Sıfır KuralıÖzet - String Sınıfı6Operatör Aşırı Yükleme
Operatör Aşırı Yüklemeye GirişAritmetik Operatör Aşırı YüklemeKarşılaştırma Operatörü Aşırı YüklemeStream OperatörleriAtama Operatörü Aşırı Yükleme[] ve () Operatör Aşırı YüklemeTip Dönüşüm OperatörleriÖzet - Matris Sınıfı9Şablonlar
Fonksiyon ŞablonlarıSınıf ŞablonlarıŞablon ÖzelleştirmeVariadic ŞablonlarSFINAE ve Type Traits TemelleriÖzet - Generic Konteyner