logo

C++ STL'de İleri Liste

İleri_liste konteynerin uygulanmasını sağlar tek bağlantılı liste veri yapısı. Verileri, her öğenin dizideki bir sonraki öğeye işaret ettiği bitişik olmayan bellekte saklar. Bu, öğenin konumu bilindiğinde ekleme ve silme işlemlerini daha hızlı hale getirir.

Sözdizimi

İleri liste şu şekilde tanımlanır: std::forward_list içindeki sınıf şablonu< ileri_liste > başlık dosyası.



powershell vs bash

ileri_listefl;

Neresi

  • T: İleri listedeki öğelerin veri türü.
  • F: Yönlendirme listesine atanan ad.

Bildirim ve Başlatma

Bir forward_list aşağıdaki örnekte gösterildiği gibi çeşitli yollarla bildirilebilir ve başlatılabilir:



C++
#include    using namespace std; void printFL(forward_list<int>& fl) {  for (auto i : fl)  cout << i << ' ';  cout << 'n'; } int main() {    // Creating an empty forward_list  forward_list<int> fl1;  // Creating a forward_list with  // default value  forward_list<int> fl2(3 4);    // Creating a forward_list from an  // initializer list  forward_list<int> fl3 = {1 5 3 4};    printFL(fl2);  printFL(fl3);  return 0; } 

Çıkış
4 4 4 1 5 3 4 

Örnek: Yukarıdaki programda, üç şekilde basit bir şekilde başlatılmış ileri liste yapıyoruz:

  • İfade ileri_liste FL1 tam sayıların boş bir ileri listesi oluşturur.
  • İfade ileri_liste fl2(34) 3 boyutunda ve her öğe 4 olan bir ileri liste oluşturur.
  • İfade ileri_liste fl3 = {1 5 3 4} bir iletme listesi oluşturur ve başlatıcı listesindeki öğelerle başlatır.

Temel İşlemler

İleri listede gerçekleştirebileceğimiz temel işlemler şunlardır:

1. Öğelere Erişim

İleri listenin öğelerine diziler veya vektörler gibi indeksler kullanılarak erişilemez. Erişmek için listeyi baştan itibaren istenen konuma kadar sırayla gitmemiz gerekiyor. Bu artırılarak yapılabilir başlamak() yineleyici ancak kullanmak daha iyidir Sonraki() veya ilerlemek() işlev.



Ancak listenin ilk öğesine şu adresten kolayca erişilebilir: ön() Yöntem.

Örnek:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Access the first element  cout << fl.front() << endl;    // Access third element  auto it = next(fl.begin() 2);  cout << *it;  return 0; } 

Çıkış
1 3

Örnek: Yukarıdaki programda ilk eleman kullanılarak yazdırılır. ön() Yöntem. Üçüncü öğeye erişmek için Sonraki() yineleyiciyi baştan iki konum taşımak için kullanılır ve *BT yineleyicinin referansını kaldırmak için kullanılır.

2. Eleman Ekleme

Öğeler kullanılarak ileri listeye eklenebilir. insert_after() işlev. Elemanın ekleneceği yineleyiciyi gerektirir. Ancak ön tarafa hızlı yerleştirme aşağıdaki özelliklerle desteklenir: push_front() Yöntem.

Örnek:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {5 4};  // Inserting Element at front  fl.push_front(1);    // Insert 3 after the second element  auto it = fl.begin();  advance(it 1);  fl.insert_after(it 3);    for (auto x: fl) cout << x << ' ';  return 0; } 

Çıkış
1 5 3 4 

Açıklama: Bu programda forward_list'in ilk elemanı ön tarafa eklenir. push_front() işlev. Daha sonra bir yineleyici oluşturulur ve kullanılarak bir konum ileri taşınır. ilerlemek() işlev. Bundan sonra eleman 5 kullanılarak ikinci elemandan sonra eklenir. insert_after() işlev.

3. Öğelerin Güncellenmesi

Mevcut öğelerin değeri, onlara erişilerek ve kullanılarak kolayca değiştirilebilir. atama operatörü yeni değeri atamak için.

Örnek:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Updating first element  fl.front() = 111;  cout << fl.front() << endl;    // Updating third element  auto it = next(fl.begin() 2);  *it = 333;  cout << *it;  return 0; } 

Çıkış
111 333

4. Eleman Bulma

İleri liste, bir öğeyi aramak için herhangi bir üye işlevi sağlamaz ancak bulmak() Verilen herhangi bir değeri bulan algoritma.

Örnek :

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Finding 3  auto it = find(fl.begin() fl.end() 3);    if (it != fl.end()) cout << *it;  else cout << 'Element not Found';  return 0; } 

Çıkış
3

5. Geçiş

Bir ileri liste kullanılarak geçilebilir başlamak() Ve son() döngüye sahip yineleyiciler var ancak yalnızca ileri doğru hareket edebiliyoruz, geriye doğru hareket edemiyoruz.

Örnek:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};    // Traversing using range-based for loop  for(auto i : fl)  cout << i << ' ';  cout << endl;    return 0; } 

Çıkış
1 5 3 4 

6. Öğeleri Silme

İleri listede, verilen konumdaki öğeyi kullanarak silebiliriz. delete_after() Yöntem. Bu yöntem yineleyiciyi hedef öğeden önceki bir konuma götürür. Ön taraftan hızlı silme işlemi aşağıdakiler kullanılarak mümkündür: pop_front() Yöntem.

Örnek:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Delete first element  fl.pop_front();    // Delete third element  auto it = fl.begin();  advance(it 1);  fl.erase_after(it);    for (auto x: fl) cout << x << ' ';  return 0; } 

Çıkış
5 3 

7. Yönlendirme Listesinin Boyutu

forward_list'in yerleşik size() işlevi yoktur. Boyutunu bulmak için, elemanları bir döngü ile geçerek veya std:: mesafesini kullanarak manuel olarak saymamız gerekir.

C++
#include    #include  #include    using namespace std; int main() {  forward_list<int> flist={10203040};  //Calculate size by counting elements using std:: distance  int size=distance(flist.begin()flist.end());  cout<<'Size of forward_list: '<<size<<endl;  return 0; } 

Çıkış
Size of forward_list: 4 

8. boş()

Forward_list'in boş olup olmadığını kontrol etmek için kullanılır.
Liste boşsa true değerini döndürür, aksi takdirde konteynerde veri olup olmadığının hızlı bir şekilde doğrulanmasına olanak tanır.

C++
#include    #include  using namespace std; int main() {  forward_list<int> flist;  if (flist.empty()) {  cout << 'The forward_list is empty.' << endl;  }  flist.push_front(10);  if (!flist.empty()) {  cout << 'The forward_list is not empty.' << endl;  }  return 0; } 

Çıkış
The forward_list is empty. The forward_list is not empty. 

Zaman Karmaşıklığı

Aşağıdaki tabloda, ileri listedeki yukarıdaki işlemlerin zaman karmaşıklığı listelenmektedir:

Operasyon Zaman Karmaşıklığı
İlk öğeye erişin Ç(1)
Erişim nbueleman Açık)
Ön tarafa yerleştirin Ç(1)
Belirli bir konumdan sonra ekle Açık)
İlk öğeyi sil Ç(1)
Belirli bir konumdan sonra sil Açık)
Geçiş Açık)

İleri Liste ve Liste

Özellik

Java polimorfizmi

ileri_liste

liste

Bağlantılı Liste Türü

Tek bağlantılı liste

Çift bağlantılı liste

Geçiş

Yalnızca ileriye doğru hareket edebilir

Hem ileri hem de geri hareket edebilir

Bellek kullanımı

Daha az bellek kullanır (düğüm başına yalnızca bir işaretçi)

Daha fazla bellek kullanır (düğüm başına iki işaretçi)

Ekleme/Silme

Hızlı ekleme ve silme, ancak yalnızca belirli bir konumda veya sonrasında

İstediğiniz yere hızlı ekleme ve silme (bir konumdan önce veya sonra)

Desteklenen işlevler

Listeyle karşılaştırıldığında sınırlı (boyut yok() ters yineleyici yok)

size() revers() çift yönlü yineleyicileri içeren daha eksiksiz arayüz.