BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C++ Programlama > Standart şablon kütüphanesi (STL)

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:

Konteyner Açıklama
bitset Bir seri bit değeridir.
deque Çift uçlu bir kuyruktur.
list Linear bir listedir.
map Her bir anahtarın tek bir değer ile eşleştiği anahtar/değer ikililerini depolar.
multimap Her bir anahtarın iki veya daha fazla değer ile eşleştiği anahtar/değer ikililerini depolar.
multiset Her bir elemanın benzersiz olması gerekmeyen bir set tanımlar.
priority_queue Öncelikli bir kuyruğu ifade eder.
queue Bir kuyruğu ifade eder.
set İçindeki her bir elemanın benzersiz olduğu bir gruptur.
stack Bir yığını ifade eder.
vector Dinamik 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şim Değerleri depolar ve okur. Elemanlara rastgele erişilebilir.
Çift yönlü Değerleri depolar ve okur. İleri ve geri hareket eder.
İleri Değ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.