Menu
Coddy logo textTech

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.

Standard Template Library (STL), yaygın veri yapılarını ve algoritmaları sağlayan, şablon tabanlı sınıf ve işlevlerden oluşan bir koleksiyondur. Öğrendiğiniz şablon kavramları üzerine kurulan STL, güçlü bir tasarım felsefesini benimser: veri depolamayı veri işlemeden ayırmak.

STL, birlikte çalışan üç temel bileşen etrafında düzenlenmiştir:

BileşenAmaçÖrnekler
KapsayıcılarNesne koleksiyonlarını depolarvector, map, set
YineleyicilerKapsayıcı öğelerine erişim sağlarGirdi, çıktı, rastgele erişim
AlgoritmalarVeriler üzerinde işlemler gerçekleştirirsort, find, transform

Temel fikir, algoritmaların kapsayıcıları doğrudan bilmemesidir; bunlar yineleyiciler aracılığıyla çalışır. Bu, tek bir sort algoritmasının vektörlerle, dizilerle ve doğru yineleyici türünü sağlayan herhangi bir kapsayıcıyla ç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, farklı seçenekleri bir araya getirip kullanabileceğiniz anlamına gelir: yeni kod yazmadan herhangi bir algoritmayı uyumlu herhangi bir kapsayıcıyla kullanın. STL, savaşta test edilmiş ve optimize edilmiş uygulamalar sunar; böylece yaygın veri yapılarını yeniden icat etmek yerine sorunları çözmeye odaklanabilirsiniz.

challenge icon

Görev

Kolay

Kapsayıcıları, yineleyicileri ve algoritmaları birbirinden ayıran STL felsefesini gösteren basit bir veri işleme sistemi oluşturalı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.

İki dosya oluşturacaksın:

  • DataProcessor.h: STL tasarım felsefesini göstererek yineleyiciler aracılığıyla STL kapsayıcılarıyla çalışan yardımcı işlevler tanımla.

    Bir printVector alan ve tüm öğeleri aralarında boşluk olacak şekilde, ardından bir yeni satır yazdıran std::vector<int>& adlı bir işlev oluştur. Kapsayıcıda gezinmek için yineleyicileri (begin() ve end()) kullan.

    Bir sortAndPrint alan, bunu std::vector<int>& kullanarak sıralayan ve ardından sıralanmış öğeleri aralarında boşluk olacak şekilde, ardından bir yeni satır yazdıran std::sort adlı bir işlev oluştur.

    Bir findElement ve aranacak bir std::vector<int>& değeri alan int adlı bir işlev oluştur. Öğeyi bulmak için std::find kullan. Bulunursa Found: <value> yazdır. Bulunamazsa Not found: <value> yazdır.

    Bir getSum alan ve tüm öğelerin toplamını döndüren std::vector<int>& adlı bir işlev oluştur. Bunun için yineleyicilerle basit bir döngü kullanabilirsin.

  • main.cpp: Girdileri oku ve STL bileşenlerinin birlikte nasıl çalıştığını göster.

    Beş girdi oku (her biri ayrı bir satırda):

    1. Birinci tam sayı
    2. İkinci tam sayı
    3. Üçüncü tam sayı
    4. Dördüncü tam sayı
    5. Aranacak bir değer

    Bir std::vector<int> oluştur ve ilk dört tam sayıyı buna ekle. Ardından STL felsefesini şu şekilde göster:

    1. Original: yazdır, ardından printVector işlevini çağır
    2. Sorted: yazdır, ardından sortAndPrint işlevini çağır
    3. Arama değeriyle findElement işlevini çağır
    4. Sum: <result> kullanarak getSum yazdır

Örneğin girdiler 5, 2, 8, 1 ve 8 olduğunda:

Original: 5 2 8 1 
Sorted: 1 2 5 8 
Found: 8
Sum: 16

Girdiler 10, 30, 20, 40 ve 15 olduğunda:

Original: 10 30 20 40 
Sorted: 10 20 30 40 
Not found: 15
Sum: 100

İşlevlerinin yineleyiciler aracılığıyla vektörle nasıl çalıştığına ve std::sort ile std::find işlevlerinin uygun yineleyici türünü sağlayan herhangi bir kapsayıcı üzerinde nasıl çalıştığına dikkat et. STL tasarımının gücü budur: algoritmalar kapsayıcılardan ayrıdır ve yalnızca yineleyiciler aracılığıyla birbirine bağlanır.

Kendin dene

#include <iostream>
#include <vector>
#include "DataProcessor.h"

using namespace std;

int main() {
    // Girişten beş tamsayı oku
    int num1, num2, num3, num4, searchValue;
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> num4;
    cin >> searchValue;
    
    // TODO: Bir vektör oluştur ve ilk dört tamsayıyı ona ekle
    
    // TODO: "Original: " yazdır ve printVector'ı çağır
    
    // TODO: "Sorted: " yazdır ve sortAndPrint'i çağır
    
    // TODO: Arama değeriyle findElement'i çağır
    
    // TODO: "Sum: " yazdır ve ardından getSum sonucunu yaz
    
    return 0;
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online C++ derleyicisi