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ı.

ileri_liste fl;

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  =  {  10    20    30    40  };      //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 n bu eleman 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

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.