Ana sayfa C++ Standart şablon kütüphanesi (STL)
Gönderi
İptal

C++ Standart şablon kütüphanesi (STL)

STL hakkında

Standart şablon kütüphanesi (Standart Templates Library - STL), hazır sınıf ve fonksiyon şablonları içerir. Bu şablonlar kullandıkları vektör, liste, kuyruk ve yığın gibi yaygın algoritma ve veri yapılarına erişim için fonksiyonlar tanımlar. STL şablon sınıflarından oluşturulduğundan, algoritmalar ve veri yapıları neredeyse her tür veriye uygulanabilir.

STL, birbiriyle bağlantılı olarak çalışan dört temel unsurdan oluşur:

  • Konteynerler (Containers)
  • Algoritmalar
  • Tekrarlayıcılar (Iterators)
  • Fonksiyonlar

Konteynerler (Containers)

Konteynerler kütüphanesi, kuyruklar, listeler ve yığınlar gibi ortak veri yapılarının kolayca kullanılmasını sağlayan, genel bir sınıf şablonları ve algoritmalardan oluşur. Her biri farklı bir işlem grubu sağlamak üzere tasarlanmış üç konteyner sınıfı vardır:

  • Sıralı konteynerler (Sequence containers)
  • İlişkisel konteynerler (Associative containers)
  • Sırasız İlişkisel konteynerler (Unordered associative containers)

Konteyner, elemanları için ayrılan depolama alanını yönetir ve doğrudan veya tekrarlayıcılar (iterators) yolulya elemanlarına erişim sağlamak için üye fonksiyonlar içerir.

Verilerin depolanmasında kullanılan konteynerlerin listesi aşağıdaki tabloda gösterilmektedir:

KonteynerAçıklama
bitsetBir seri bit değeridir.
dequeÇift uçlu bir kuyruktur.
listLinear bir listedir.
mapHer bir anahtarın tek bir değer ile eşleştiği anahtar/değer ikililerini depolar.
multimapHer bir anahtarın iki veya daha fazla değer ile eşleştiği anahtar/değer ikililerini depolar.
multisetHer bir elemanın benzersiz olması gerekmeyen bir set tanımlar.
priority_queueÖncelikli bir kuyruğu ifade eder.
queueBir kuyruğu ifade eder.
setİçindeki her bir elemanın benzersiz olduğu bir gruptur.
stackBir yığını ifade eder.
vectorDinamik bir dizidir.

Algoritmalar

Algoritmalar konteynerler içeriğinde yer alan verilere ilk değer verme, sıralama ve arama gibi işlemler yapabilirler.

Tekrarlayıcılar (Iterators)

Tekrarlayıcılar, aşağı yukarı işaretçiler gibi davranan nesnelerdir. Bir konteyner içinde yer alan verilere sırasıyla erişim için tekrarlayıcıları kullanabiliriz. Tekrarlayıcıların beş farklı türü vardır:

TekrarlayıcıErişim yetkisi
Rastgele erişimDeğerleri depolar ve okur. Elemanlara rastgele erişilebilir.
Çift yönlüDeğerleri depolar ve okur. İleri ve geri hareket eder.
İleriDeğerleri depolar ve okur. Sadece ileri hareket eder.
GirişDeğerleri okur fakat depolamaz. Sadece ileri hareket eder.
ÇıkışDeğerleri depolar fakat okumaz. Sadece ileri hareket eder.

İşaretçiler gibi kullanılan tekrarlayıcıları, artırabilir, azaltabilir ve * işlemcisi ile kullanabiliriz. Yineleyiciler, çeşitli konteynerler tarafından tanımlanan yineleyici türü kullanılarak bildirilir. Tekrarlayıcıların bildirimi farklı konteynerler tarafından iterator ifadesi kullanılarak yapılır.

STL ile, ters tekrarlayıcıları da kullanabiliriz. destekler. Ters tekrarlayıcılar, bir dizi boyunca ters yönde hareket eden çift yönlü veya rastgele erişimli tekrarlayıcılardır. Bu nedenle, bir ters tekrarlayıcı bir dizinin sonunu gösterirse, bu tekrarlayıcının artırılması dizinin sondan bir önceki elemanını göstermesini sağlar.

Fonksiyonlar

Konteynerler, algoritmalar ve tekrarlayıcıların yanı sıra karşılaştırma fonksiyonları ve fonksiyon nesneleri yer almaktadır.

<functional> başlık dosyası içindeki şablonlar, operator() tanımlayan nesneleri oluşturmamıza yardımcı olur. Bunlar fonksiyon nesneleri olarak adlandırılır ve birçok yerde fonksiyon işaretçileri yerine kullanılabilirler. <functional> başlık dosyasında içinde bildirilmiş önceden tanımlanmış birkaç fonksiyon nesnesi aşağıda gösterilmektedir:

En yaygın kullanılan fonksiyon nesnesi olan less, bir nesnenin diğerinden daha küçük olduğunu belirler. Fonksiyon nesneleri, STL algoritmalarında gerçek fonksiyon işaretçilerinin yerine kullanılabilir. Fonksiyon işaretçileri yerine fonksiyon nesnelerini kullanmak, STL’nin daha verimli kod üretmesini sağlar.

Bu gönderi CC BY 4.0 lisansı altındadır.

C++ Run-Time Type ID

C++ Vektörler