Örnek ile C++'da std::list

std::list nedir?

C++'da std::list bir saklama kapsayıcısını ifade eder. std:list, öğeleri herhangi bir yerden eklemenize ve kaldırmanıza olanak tanır. std::list çift bağlantılı bir liste olarak uygulanır. Bu, liste verilerine çift yönlü ve sıralı olarak erişilebileceği anlamına gelir.

Standart Şablon Kitaplığı listesi hızlı rastgele erişimi desteklemez, ancak her yönden sıralı erişimi destekler.

Liste öğelerini farklı bellek parçalarına dağıtabilirsiniz. Verilere sıralı erişim için gereken bilgiler bir kapsayıcıda saklanır. std::list, çalışma zamanı sırasında gerektiği gibi her iki uçtan da genişleyebilir ve küçülebilir. Dahili bir ayırıcı, depolama gereksinimlerini otomatik olarak karşılar.

Bu C++ eğitiminde şunları öğreneceksiniz:

Neden std::list kullanmalı?

İşte, std::List kullanmanın nedeni:

  • std::list, dizi ve vektör gibi diğer dizi kapsayıcılarına kıyasla daha iyi sonuç verir.
  • Öğeleri herhangi bir konumdan ekleme, taşıma ve çıkarma konusunda daha iyi performansa sahiptirler.
  • std::list ayrıca bu tür işlemleri yoğun bir şekilde gerçekleştiren algoritmalarla daha iyi sonuç verir.

Liste Sözdizimi

std::list'i tanımlamak için başlık dosyasını içe aktarmalıyız. İşte std::list tanım sözdizimi: |_+_|

İşte yukarıdaki parametrelerin bir açıklaması:

  • T – İçerdiği öğenin türünü tanımlar.

    T'yi herhangi bir veri türüyle, hatta kullanıcı tanımlı türlerle bile değiştirebilirsiniz.

  • Alloc – Ayırıcı nesnenin türünü tanımlar.

    Bu, varsayılan olarak ayırıcı sınıf şablonunu kullanır. Değere bağlıdır ve basit bir bellek ayırma modeli kullanır.

Örnek 1:

 template  class list; 

Çıktı:

İşte kodun bir ekran görüntüsü:

Kod Açıklaması:

  1. İşlevlerini kullanmak için algoritma başlık dosyasını ekleyin.
  2. İşlevlerini kullanmak için iostream başlık dosyasını ekleyin.
  3. İşlevlerini kullanmak için liste başlık dosyasını ekleyin.
  4. main() işlevini çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
  5. 4 tamsayı kümesiyle my_list adlı bir liste oluşturun.
  6. Bir döngü değişkeni x oluşturmak için bir for döngüsü kullanın. Bu değişken, liste öğeleri üzerinde yineleme yapmak için kullanılacaktır.
  7. Konsoldaki listenin değerlerini yazdırın.
  8. for döngüsünün gövdesinin sonu.
  9. main() işlevinin gövdesinin sonu.

C++ Liste İşlevleri

İşte ortak std::list işlevleri:

İşlev Açıklama
sokmak()Bu işlev, yineleyicinin işaret ettiği konumdan önce yeni bir öğe ekler.
Geri itmek()Bu işlevler, listenin sonuna yeni bir öğe ekler.
push_front()Listenin önüne yeni bir öğe ekler.
pop_front()Listenin ilk öğesini siler.
boy()Bu işlev, liste öğelerinin sayısını belirler.
ön()Listenin ilk öğelerini belirlemek için.
geri()Listenin son öğesini belirlemek için.
ters()Liste öğelerini tersine çevirir.
Git()Sıralanmış iki listeyi birleştirir.

yapıcılar

Başlık dosyası tarafından sağlanan işlevlerin listesi:

  • Varsayılan kurucu std::list::list()- Sıfır elemanlı boş bir liste oluşturur.
  • Fill yapıcısı std::list::list()- n elemanlı bir liste oluşturur ve her elemana sıfır (0) değeri atar.
  • Aralık oluşturucu std::list::list()- ilkten sonuncuya kadar birçok öğe içeren bir liste oluşturur.
  • Kopyalama yapıcısı std::list::list()- Mevcut listede bulunan her öğenin bir kopyasını içeren bir liste oluşturur.
  • Taşı yapıcı std::list::list()- taşıma semantiğini kullanarak başka bir listenin öğeleriyle bir liste oluşturur.
  • Başlatıcı liste yapıcısı std::list::list()-Taşıma semantiğini kullanarak başka bir listenin öğeleriyle bir liste oluşturur.

Örnek 2:

 #include #include #include int main() { std::list my_list = { 12, 5, 10, 9 }; for (int x : my_list) { std::cout << x << '
'; } } 

Çıktı:

İşte kodun bir ekran görüntüsü:

Kod Açıklaması:

  1. İşlevlerini kullanmak için iostream başlık dosyasını ekleyin.
  2. İşlevlerini kullanmak için liste başlık dosyasını ekleyin.
  3. Sınıflarını çağırmadan kullanmak için std ad alanını koda ekleyin.
  4. main() işlevini çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
  5. l adında boş bir liste oluşturun.
  6. 3 tamsayı kümesiyle l1 adında bir liste oluşturun.
  7. Başından sonuna kadar l1 adlı listedeki tüm öğeleri içeren l2 adlı bir liste oluşturun.
  8. Hareket semantiğini kullanarak l3 adında bir liste oluşturun. l3 listesi, l2 listesiyle aynı içeriğe sahip olacaktır.
  9. Diğer metnin yanında konsolda l adlı listenin boyutunu yazdırın.
  10. Konsolda bir miktar metin yazdırın.
  11. Adında bir yineleyici oluşturun ve l2 adlı listenin öğelerini yinelemek için kullanın.
  12. Konsolda l2 adlı listenin öğelerini yazdırın.
  13. Konsolda bir miktar metin yazdırın.
  14. Adında bir yineleyici oluşturun ve l3 adlı listenin öğelerini yinelemek için kullanın.
  15. Konsolda l3 adlı listenin öğelerini yazdırın.
  16. Program başarıyla tamamlandıktan sonra değer döndürmelidir.
  17. main() işlevinin gövdesinin sonu.

Kapsayıcı özellikleri

İşte konteyner özelliklerinin listesi:

Mülk Açıklama
SıraSıra kapsayıcıları, öğelerini katı bir doğrusal sırayla sıralar. Öğelere sıradaki konumlarına göre erişilir.
Çift bağlantılı listeHer öğe, önceki ve sonraki öğelerin nasıl bulunacağı hakkında bilgi içerir. Bu, ekleme ve silme işlemleri için sabit süre sağlar.
tahsisatçı farkındaDepolama boyutunu dinamik olarak değiştirmek için bir ayırıcı nesnesi kullanılır.

Listeye Ekleme

Bir listeye değer eklemek için kullanabileceğimiz farklı fonksiyonlar vardır. Bunu gösterelim:

Örnek 3:

 #include #include using namespace std; int main(void) { list l; list l1 = { 10, 20, 30 }; list l2(l1.begin(), l1.end()); list l3(move(l1)); cout << 'Size of list l: ' << l.size() << endl; cout << 'List l2 contents: ' << endl; for (auto it = l2.begin(); it != l2.end(); ++it) cout << *it << endl; cout << 'List l3 contents: ' << endl; for (auto it = l3.begin(); it != l3.end(); ++it) cout << *it << endl; return 0; } 

Çıktı:

İşte kodun bir ekran görüntüsü:

Kod Açıklaması:

  1. İşlevlerini kullanmak için algoritma başlık dosyasını ekleyin.
  2. İşlevlerini kullanmak için iostream başlık dosyasını ekleyin.
  3. İşlevlerini kullanmak için liste başlık dosyasını ekleyin.
  4. main() işlevini çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
  5. 4 tamsayı kümesiyle my_list adlı bir liste oluşturun.
  6. 11 öğesini my_list adlı listenin önüne ekleyin.
  7. 18 numaralı öğeyi my_list adlı listenin sonuna ekleyin.
  8. Bir yineleyici oluşturun ve bunu my_list listesinden 10 öğesini bulmak için kullanın.
  9. Yukarıdaki öğenin bulunup bulunmadığını belirlemek için bir if ifadesi kullanın.
  10. Bulunduysa, 21 numaralı öğeyi yukarıdaki öğeden önce ekleyin.
  11. if ifadesinin gövdesinin sonu.
  12. Bir döngü değişkeni x oluşturmak için bir for döngüsü kullanın. Bu değişken, liste öğeleri üzerinde yineleme yapmak için kullanılacaktır.
  13. Konsoldaki listenin değerlerini yazdırın.
  14. for döngüsünün gövdesinin sonu.
  15. main() işlevinin gövdesinin sonu.

Listeden Silme

Bir listeden öğeleri silmek mümkündür. delete() işlevi, bir listeden bir öğeyi veya bir dizi öğeyi silmenizi sağlar.

  • Tek bir öğeyi silmek için bir tamsayı konumunu geçmeniz yeterlidir. Öğe silinecek.
  • Bir aralığı silmek için başlangıç ​​ve bitiş yineleyicilerini geçersiniz. Bunu gösterelim.

Örnek 4:

 #include #include #include int main() { std::list my_list = { 12, 5, 10, 9 }; my_list.push_front(11); my_list.push_back(18); auto it = std::find(my_list.begin(), my_list.end(), 10); if (it != my_list.end()) { my_list.insert(it, 21); } for (int x : my_list) { std::cout << x << '
'; } } 

Çıktı:

İşte kodun ekran görüntüsü:

Kod Açıklaması:

  1. İşlevlerini kullanmak için algoritma başlık dosyasını ekleyin.
  2. İşlevlerini kullanmak için iostream başlık dosyasını ekleyin.
  3. İşlevlerini kullanmak için liste başlık dosyasını ekleyin.
  4. Sınıflarını çağırmadan kullanmak için programımıza std ad alanını dahil edin.
  5. main() işlevini çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
  6. 4 tamsayı kümesiyle my_list adlı bir liste oluşturun.
  7. Konsolda bir miktar metin yazdırın.
  8. Bir döngü değişkeni x oluşturmak için bir for döngüsü kullanın. Bu değişken, liste öğeleri üzerinde yineleme yapmak için kullanılacaktır.
  9. Konsoldaki listenin değerlerini yazdırın.
  10. For döngüsünün gövdesinin sonu.
  11. Listenin ilk öğesine işaret eden bir yineleyici i oluşturun.
  12. Yineleyici i tarafından işaret edilen delete() işlevini kullanın.
  13. Konsolda bir miktar metin yazdırın.
  14. Bir döngü değişkeni x oluşturmak için bir for döngüsü kullanın. Bu değişken, liste öğeleri üzerinde yineleme yapmak için kullanılacaktır.
  15. Konsoldaki listenin değerlerini yazdırın. Bu, silme işleminden sonra gelir.
  16. For döngüsünün gövdesinin sonu.
  17. Program başarıyla tamamlandıktan sonra bir değer döndürmelidir.
  18. main() işlevinin gövdesinin sonu.

Özet:

  • std::list bir saklama kabıdır.
  • Öğelerin sabit zamanda herhangi bir yerden eklenmesine ve silinmesine izin verir.
  • Çift bağlantı olarak uygulanır
  • std::list verilerine çift yönlü ve sıralı olarak erişilebilir.
  • std::list hızlı rastgele erişimi desteklemiyor. Ancak, her yönden sıralı erişimi destekler.
  • std::list'in liste öğelerini farklı bellek parçalarına dağıtabilirsiniz.
  • Çalışma zamanı sırasında gerektiği gibi std::list'i her iki uçtan da küçültebilir veya genişletebilirsiniz.
  • Öğeleri std::list'e eklemek için insert() işlevini kullanırız.
  • Öğeleri std::listesinden silmek için delete() işlevini kullanırız.