Yığınla C++ Örnekle STL
⚡ Akıllı Özet
Yığınla C++ STL, tek bir uçtan başlayıp tek bir sarmalayıcıdan başlayarak eleman ekleyen ve çıkaran bir LIFO kapsayıcı adaptörü uygular.ping Sıralı verileri yönetmek için kullanılan, deque, vector veya list gibi temel bir sıralı yapı.
std::stack nedir?
Yığın, LIFO (Son Giren İlk Çıkar) tekniğine dayalı olarak çalışan bir veri yapısıdır. std::stack, elemanların yalnızca bir uçtan eklenmesine ve çıkarılmasına izin verir.
`std::stack` sınıfı bir konteyner adaptörüdür. Konteyner nesneleri benzer veri türündeki verileri tutar. Çeşitli sıralı konteynerlerden bir yığın oluşturabilirsiniz. Herhangi bir konteyner sağlanmazsa, varsayılan olarak `deque` konteyneri kullanılır. Konteyner adaptörleri yineleyicileri desteklemez, bu nedenle veri manipülasyonu için kullanılamazlar.
Yığın Söz Dizimi
Bir yığın oluşturmak için şunu eklemeliyiz: kodumuzda başlık dosyası. Daha sonra std::stack'ı tanımlamak için bu sözdizimini kullanırız:
template <class Type, class Container = deque<Type> > class stack;
- Menşei – std::stack'ta bulunan öğenin Türüdür. Herhangi bir geçerli olabilir C++ yazın ve hatta kullanıcı tanımlı bir tür.
- Konteyner – Temeldeki konteyner nesnesinin Türüdür.
Üye Türleri
Yığın üye türleri şunlardır:
- değer_türü– İlk şablon parametresi olan T, öğe türlerini belirtir.
- konteyner_tipi– İkinci şablon parametresi olan Container, temel kapsayıcı türünü belirtir.
- Beden Çeşidi– İşaretsiz tam sayı tipi.
OperaStack'teki işlemler
A C++ stack aşağıdaki temel işlemleri destekler:
- itmek – Yığına bir öğe ekler/iter.
- pop – Yığından bir öğeyi kaldırır/çıkarır.
- gözetleme – Yığındaki en üstteki öğeyi kaldırmadan döndürür.
- dolu – Bir yığının dolu olup olmadığını kontrol eder.
- boş – Bir yığının boş olup olmadığını kontrol eder.
Yığın Uygulaması
Aşağıdaki adımlar, öğeler yığına eklendikçe ve ardından yığından çıkarıldıkça yığının üst kısmının nasıl kaydığını göstermektedir:
Adım 1) Başlangıçta boş bir yığınımız var. Boş yığının en üstündeki eleman -1 olarak ayarlanır.
Adım 2) Ardından, 5 elemanını yığına ekledik. Yığının en üstündeki eleman 5'i gösterecektir.
3. Adım) Ardından, 50 numaralı elemanı yığına ekledik. Yığının üst kısmı kayarak 50 numaralı elemanı gösterir hale geldi.
Adım 4) Ardından, yığının en üstündeki elemanı kaldırarak bir pop işlemi gerçekleştirdik. 50 numaralı eleman yığından çıkarıldı. Yığının en üstündeki eleman artık 5 numaralı elemanı gösteriyor.
itme() ve pop()
`stack::push()` fonksiyonu, yığının en üstüne yeni bir öğe ekler. Ekleme işleminden sonra yığın boyutu 1 artırılır. Fonksiyon şu sözdizimini kullanır:
stack.push(value)
Değer, yığına eklenecek öğedir.
`stack::pop()` fonksiyonu, yığının en üstündeki öğeyi kaldırır. Bu, yığının en yeni öğesidir. Kaldırma işleminden sonra yığın boyutu 1 azalır. İşte fonksiyonun sözdizimi:
stack.pop()
Fonksiyon hiçbir parametre almaz.
Örnek 1:
#include <iostream> #include <stack> using namespace std; int main() { stack<int> st; st.push(10); st.push(20); st.push(30); st.push(40); st.pop(); st.pop(); while (!st.empty()) { cout << ' ' << st.top(); st.pop(); } }
Çıktı:
İşte kodun ekran görüntüsü:
Code Açıklama:
- İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
- İşlevlerini kullanmak için yığın başlık dosyasını kodumuza ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
- Main() işlevini çağırın. Bu fonksiyonun içerisine program mantığı eklenmelidir.
- Tamsayı değerlerini depolamak için bir yığın st oluşturun.
- Yığına 10 değerini eklemek için push() işlevini kullanın.
- Yığına 20 değerini eklemek için push() işlevini kullanın.
- Yığına 30 değerini eklemek için push() işlevini kullanın.
- Yığına 40 değerini eklemek için push() işlevini kullanın.
- Üstteki öğeyi (40) yığından kaldırmak için pop() işlevini kullanın. Üst öğe artık 30 olur.
- Üstteki öğeyi (30) yığından kaldırmak için pop() işlevini kullanın. Üst öğe artık 20 olur.
- Yığının boş OLMADIĞINI kontrol etmek için while döngüsünü ve empty() işlevini kullanın. ! NOT operatörüdür.
- Yığındaki mevcut içeriklerin konsolda yazdırılması.
- Yığındaki pop() işlevini çağırın.
- While döngüsünün gövdesinin sonu.
- main() işlev gövdesinin sonu.
boş(), boyut(), üst()
Yığınların, yığınla ve değerleriyle oynamak için kullanabileceğiniz yerleşik işlevleri vardır. Bunlar şunları içerir:
- boş()– Yığının boş olup olmadığını kontrol eder.
- boyut()– yığın boyutunu, yani yığındaki eleman sayısını döndürür.
- üst()– Yığının en üstündeki öğeye erişir.
Örnek 2:
#include <iostream> #include <stack> using namespace std; void createStack(stack <int> mystack) { stack <int> ms = mystack; while (!ms.empty()) { cout << '\t' << ms.top(); ms.pop(); } cout << '\n'; } int main() { stack <int> st; st.push(32); st.push(21); st.push(39); st.push(89); st.push(25); cout << "The stack st is: "; createStack(st); cout << "\n st.size() : " << st.size(); cout << "\n st.top() : " << st.top(); cout << "\n st.pop() : "; st.pop(); createStack(st); return 0; }
Çıktı:
İşte kodun ekran görüntüsü:
Code Açıklama:
- Fonksiyonlarını kullanabilmek için iostream başlık dosyasını kodumuza ekleyin.
- İşlevlerini kullanabilmek için yığın başlık dosyasını kodumuza ekleyin.
- Sınıflarını çağırmadan kullanabilmek için programımıza std ad alanını ekleyin.
- Yığın mystack'ı oluşturmak için kullanabileceğimiz createStack işlevini oluşturun. Yığın bir dizi tamsayıyı tutacaktır.
- createStack işlevinin gövdesinin başlangıcı.
- Mystack veri tipinin bir örneğini oluşturun ve ona ms adını verin.
- Yığının boş olup olmadığını kontrol etmek için while döngüsünü ve empty() işlevini kullanın.
- While döngüsünün gövdesinin başlangıcı.
- Yığının en üstünde depolanan top() işlevini kullanın. \t karakteri yeni bir sekme oluşturacaktır.
- Yığının en üstündeki öğeyi silmek için pop() işlevini kullanın.
- While döngüsünün gövdesinin sonu.
- Konsola boş bir satır yazdırın.
- createStack işlevinin gövdesinin sonu.
- main() fonksiyonunu çağırın. Program mantığı main() fonksiyonunun gövdesine eklenmelidir.
- main() fonksiyonunun gövdesinin başlangıcı.
- Bir yığın nesnesi st oluşturun.
- 32 numaralı öğeyi yığına eklemek için push() işlevini kullanın.
- 21 numaralı öğeyi yığına eklemek için push() işlevini kullanın.
- 39 numaralı öğeyi yığına eklemek için push() işlevini kullanın.
- 89 numaralı öğeyi yığına eklemek için push() işlevini kullanın.
- 25 numaralı öğeyi yığına eklemek için push() işlevini kullanın.
- Konsola bir miktar metin yazdırın.
- Yukarıdaki ekleme işlemlerini yığına yürütmek için createStack işlevini çağırın.
- Konsoldaki yığının boyutunu diğer metinlerin yanında yazdırın.
- Öğeyi konsoldaki yığının en üstüne yazdırın.
- Konsola bir miktar metin yazdırın.
- Yığının en üstündeki öğeyi silin. Daha sonra yığında kalan elemanları döndürecektir.
- Yukarıdaki işlemleri yürütmek için createStack işlevini çağırın.
- Program başarılı bir şekilde tamamlandıktan sonra değeri döndürmelidir.
- main() fonksiyonunun gövdesinin sonu.
emplace() ve swap()
Bunlar diğer yerleşik yığın işlevleridir:
- yerleştirmek()– Ardından yığının en üstüne yeni bir öğe ekler.
- takas()– Yığın içeriğini başka bir yığının içeriğiyle değiştirir.
Örnek 3:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st1; stack<int> st2; st1.emplace(12); st1.emplace(19); st2.emplace(20); st2.emplace(23); st1.swap(st2); cout << "st1 = "; while (!st1.empty()) { cout << st1.top() << " "; st1.pop(); } cout << endl << "st2 = "; while (!st2.empty()) { cout << st2.top() << " "; st2.pop(); } }
Çıktı:
İşte kodun ekran görüntüsü:
Code Açıklama:
- İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
- İşlevlerini kullanmak için yığın başlık dosyasını kodumuza ekleyin.
- İşlevlerini kullanmak için cstdlib başlık dosyasını kodumuza ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
- main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenecektir.
- Tamsayı değerlerini depolamak için st1 adında bir yığın bildirin.
- Tamsayı değerlerini depolamak için st2 adında bir yığın bildirin.
- 12 tamsayısını st1 adlı yığına eklemek için emplace() işlevini kullanın.
- 19 tamsayısını st1 adlı yığına eklemek için emplace() işlevini kullanın.
- 20 tamsayısını st2 adlı yığına eklemek için emplace() işlevini kullanın.
- 23 tamsayısını st2 adlı yığına eklemek için emplace() işlevini kullanın.
- İki yığının (st1 ve st2) içeriğini değiştirmek için swap() işlevini kullanın. St1 yığınının içeriği st2 yığınına taşınmalıdır. St2 yığınının içeriği st1 yığınına taşınmalıdır.
- Konsola bir miktar metin yazdırın.
- ST1 yığınının boş olup olmadığını kontrol etmek için while ifadesini ve empty() işlevini kullanın.
- St1 yığınının içeriğini konsola yazdırın. " ", yığın öğelerini konsolda yazdırırken arasına boşluk ekler.
- Üstteki öğeyi kaldırmak için st1 yığınında pop() işlevini yürütün.
- while ifadesinin gövdesinin sonu.
- Konsola bir miktar metin yazdırın. Sonu bir C++ bitiş çizgisi için anahtar kelime. Yazdırmaya oradan başlamak için fare imlecini bir sonraki satıra taşır.
- ST2 yığınının boş olup olmadığını kontrol etmek için while ifadesini ve empty() işlevini kullanın.
- St2 yığınının içeriğini konsola yazdırın. " ", yığın öğelerini konsolda yazdırırken arasına boşluk ekler.
- Üstteki öğeyi kaldırmak için st2 yığınında pop() işlevini yürütün.
- while ifadesinin gövdesinin sonu.
- Main() işlevinin gövdesinin sonu.
STL'de yığın
STL (Standart Şablon Kitaplığı), ortak özellikler sağlayan şablon sınıflarıyla birlikte gelir. C++ veri yapıları. Bu nedenle STL'de bir yığın da uygulanabilir. Bu kütüphaneyi kodumuza dahil ediyoruz ve onu bir yığın tanımlamak için kullanıyoruz.
stack<T> st;
Yukarıdaki sözdizimi, T veri türündeki elemanlara st yığınını bildirir.
Örnek 4:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st; st.push(12); st.push(19); st.push(20); cout << st.top(); cout << st.size(); }
Çıktı:
İşte kodun ekran görüntüsü:
Code Açıklama:
- İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
- İşlevlerini kullanmak için yığın başlık dosyasını kodumuza ekleyin.
- İşlevlerini kullanmak için cstdlib başlık dosyasını kodumuza ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
- main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
- Tamsayı verilerini depolamak için bir yığın st bildirin.
- 12. elemanı yığına ekleyin.
- 19. elemanı yığına ekleyin.
- 20. elemanı yığına ekleyin.
- Öğeyi konsoldaki yığının en üstüne yazdırın.
- Konsoldaki yığının boyutunu yazdırın.
- main() fonksiyonunun gövdesinin sonu.







