lists stl
Uygulaması ile birlikte STL'deki Listeler Hakkında Her Şeyi Öğrenin.
Listeler sıralı kaplardır. Listeler bitişik olmayan konumlardaki öğeleri içerir. Önceki eğitimlerimizde dizileri ve vektörleri tartıştık.
Dizi ve vektör kapları söz konusu olduğunda, bu kaplar verileri bitişik bellekte sakladıkları için, bu kapların ortasına yerleştirme işlemi, yeni elemana yer açmak için mevcut öğeleri uygun şekilde kaydırmamız gerektiğinden çok maliyetli olduğunu kanıtlıyor.
=> Tam C ++ Öğreticiler Listesini Keşfetmek İçin Buraya Bakın.
pc için en iyi ücretsiz anti casus yazılım
Ne öğreneceksin:
Genel Bakış
Liste, dizi ve vektör kapsayıcılarının bu dezavantajının üstesinden gelen bir kaptır. Çok fazla ek yüke neden olmadan listedeki herhangi bir yere eleman eklememizi sağlar. Ancak, geçiş söz konusu olduğunda listeler vektörlerden daha yavaştır.
Bu eğitimde, STL'deki listelerin uygulanmasını, çeşitli geçiş işlemleri, manipülasyonlar ve örneklerle listeye erişim ile birlikte göreceğiz.
Liste işlemlerinin çoğunun vektörlerinkine benzer olduğunu ve bu nedenle vektörler hakkındaki eğitimimizi zaten okumuş olan okuyucuların liste kavramlarını yorumlamada sorun yaşamayacağını unutmayın.
Beyan ve Başlatma
Liste kapsayıcısını uygulamak ve tüm avantajlarını kullanmak için programımıza bir başlık dosyası eklememiz gerekir.
#include
Liste kapsayıcısı için genel bildirim şöyledir:
std::list listName;
Örneğin,int türünde 'mylist' adlı bir listeyi aşağıdaki gibi bildirebiliriz:
std::list mylist;
Listeyi bildirim anında başlatabilir veya desteklediği işlemlerden birini kullanarak listeye elemanlar ekleyebiliriz.
Yukarıda oluşturduğumuz listeyi nasıl başlatabileceğimize bakalım.
std::list mylist = {1, 1, 2, 3, 5};
Yukarıdaki başlatma, aşağıda gösterildiği gibi hafızaya yerleştirilecektir:
Listeyi başlattıktan sonra, bir yineleyici kullanarak bir listenin öğelerine erişebiliriz. Yineleyici işlevleri 'başla' ve 'sonlandır' liste öğeleri arasında gezinmemize yardımcı olur.
Not: Listenin yineleyicisi, ters yineleyiciler (rbegin, rend), sabit yineleyiciler (cbegin, cend) ve sabit ters yineleyiciler (crbegin, crend) gibi diğer yineleyicileri de destekler ve vektörler gibi benzer bir şekilde kullanılabilir.
Aşağıdaki örnek bunu göstermektedir.
#include #include #include #include using namespace std; int main() { list mylist = {1, 1, 2, 3, 5}; cout<<”List elements are: “; list::iterator it; for(it=mylist.begin();it!=mylist.end();++it) cout<<*it<<” “; }
Çıktı:
Liste öğeleri şunlardır: 1 1 2 3 5
Bu nedenle, yukarıdaki örnekte, Fibonacci dizisinin bir listesini açıkladık. Daha sonra, list ile aynı tipte bir yineleyici bildiriyoruz ve sonra for döngüsü kullanarak liste içeriğini baştan sona yazdırıyoruz.
Şimdi STL'deki kapsayıcıyı listeleyen işlemlere veya işlevlere geçelim.
İşlemleri Listele
- Ekle: Verilen konuma bir eleman eklemek için kullanılır. Eklenen ilk öğeyi gösteren bir yineleyici döndürür.
ekle (konum, num_elem, elem)
Nerede,
pos => Yeni elemanların ekleneceği konum.
num_elem => Eklenecek eleman sayısı; varsayılan olarak 1'dir.
öğe => Eklenecek gerçek değer.
Ekleme işlevini bir Örnek alarak anlayalım.
#include #include // for list operations using namespace std; int main() { list mylist = {1,1,2}; list::iterator it = mylist.begin(); // iterator to point to 4th position advance(it,` 3); // inserts 3 at 4th position mylist.insert(it, 3); cout << 'The list after inserting' << ' 1 element using insert() is : '; for (list::iterator i = mylist.begin();i != mylist.end();i++) cout << *i << ' '; cout << endl; }
Çıktı:
İnsert () kullanarak 1 eleman ekledikten sonraki liste: 1 1 2 3
Bu, 4'e sadece bir eleman eklemek için bir örnektir.incilistedeki son konum olan konum. Bu nedenle, önce listenin başlangıcına işaret eden yineleyiciyi tanımladığımız bir listeye sahibiz. Sonra bu yineleyiciyi 4incikonumlandırın ve 1 eleman eklemek için insert çağırın.
Ayrıca, insert işlevinde ikinci parametreyi belirterek birden fazla eleman ekleyebiliriz. Belirtilmediğinde, varsayılan olarak 1'dir.
- Geri itmek :Listenin sonuna yeni bir öğe ekler.
- push_front :Listenin başına yeni bir öğe ekler.
Push_back ve push_front işlevlerinin kullanımını gösteren bir örnek görelim.
#include #include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3}; cout<<'List elements are: '; printlist(mylist); mylist.push_front(0); mylist.push_back(5); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }
Çıktı:
Liste öğeleri şunlardır: 1 1 2 3
Push_front ve push_back'den sonra içeriği listele: 0 1 1 2 3 5
Bu örnekte, önce sırasıyla push_front ve push_back işlevlerini kullanarak her biri önde ve arkada olmak üzere tüm iki öğeyi oluşturup listeliyoruz. Çıktı, her iki işlev de yürütüldükten sonra değiştirilen listeyi gösterir.
- pop_back :Listedeki son öğeyi kaldırarak liste boyutunu 1 küçültür.
- pop_front :Listedeki ilk öğeyi kaldırarak liste boyutunu 1 küçültür.
Aşağıdaki örnek, listenin pop_back ve pop_front işlemlerinin kullanımını gösterir.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); mylist.pop_front(); mylist.pop_back(); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }
Çıktı:
Liste öğeleri şunlardır: 1 1 2 3 5
Push_front ve push_back'den sonra içeriği listele: 1 2 3
İşlemlerin tanımında açıklandığı gibi, pop_front ve pop_back işlemlerinin her biri, öğeyi listenin önünden ve arkasından, yani sırasıyla listenin ilk ve son öğesini kaldırır ve böylece listenin boyutunu her seferinde 1 azaltır.
- boyut :Listenin boyutunu, yani listedeki öğelerin sayısını verir.
- boş :Listenin boş olup olmadığını kontrol eder.
- silmek :Listeden bir öğeyi veya öğe aralığını kaldırır.
- açık :Listedeki tüm öğeleri 0 boyuta getirerek kaldırır.
Aşağıda, yukarıdaki tüm işlevlerin, yani boyut, boş, silme ve temizleme gibi kullanımını gösteren bir örnek verilmiştir.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'size of the list: '< Çıktı:
Liste öğeleri şunlardır: 1 1 2 3 5
listenin boyutu: 5
İlk öğeyi sildikten sonraki liste: 1 2 3 5
Listenin yeni boyutu: 4
temizlendikten sonra listenin boyutu: 0
Yukarıdaki program, listenin kapasitesi ile ilgili dört işlevi de göstermektedir. Listenin 1 elemanını sildiğimizde liste boyutunun 1 azaldığını görüyoruz. Listede net bir işlem dediğimizde, boyut 0'dır, bu da listedeki tüm elemanların kaldırıldığı anlamına gelir.
- ön :Listenin ilk öğesinin değerini döndürür.
- geri :Listenin son öğesinin değerini döndürür.
- takas :Bir listenin içeriğini, aynı boyut ve türdeki başka bir listenin içeriğiyle değiştirir.
- ters :Listeyi tersine çeviren bir algoritma.
- çeşit :Verilen listeyi sıralar.
Aşağıdaki örnek, ön, arka, geri, sıralama ve takas işlevlerinin kullanımını göstermektedir.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'
Front of the list: '< Çıktı:
Liste öğeleri şunlardır: 1 1 2 3 5
Listenin başı: 1
Listenin arkası: 5
Ters Liste: 5 3 2 1 1
Tek listenin içeriği: 1 3 5 7 9
Değiştirdikten sonra
mylist: 1 3 5 7 9
Oddliste: 5 3 2 1 1
Bu kodda önce list mylist'in ön ve arka değerlerini yazdırıyoruz. Daha sonra bu liste tersine çevrilir ve tersine çevrilmiş liste yazdırılır. Bundan sonra, herhangi bir sırada olmayan bir tek sayı listesi daha tanımlıyoruz ve bu listeyi sıralamak için 'Sırala' algoritmasını çağırıyoruz. Ardından, takas işlevini kullanarak iki listeyi değiştirir ve değiştirilen listeleri yazdırırız.
- ekleme :Bu işlev, bir listenin içeriğini belirli bir konumda başka bir listeye aktarmak için kullanılır.
Her iki liste de aynı türde olmalıdır.
ekleme (konum, liste);
nerede,
position => Liste içeriğinin aktarılacağı konum.
list => Elemanlarının aktarılacağı liste.
Aşağıda verilen örnek, splice fonksiyonunun kullanımını göstermektedir.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 8,13}; cout<<'List elements are: '; printlist(mylist); list seclist = {2,3,5}; cout<<'list to be spliced: '; printlist(seclist); list:: iterator it = mylist.begin(); it ++; it++; mylist.splice(it,seclist); cout<<'
List contents after splicing at position 2: '; printlist(mylist); }
Çıktı:
Liste öğeleri şunlardır: 1 1 8 13
eklenecek liste: 2 3 5
Konum 2'de eklemeden sonra içeriği listeleyin: 1 1 2 3 5 8 13
otomasyon testine sıfırdan nasıl başlanır
misal iki liste kullandığımızı gösterir. İlk olarak, mylist için yineleyici iki konuma taşınır ve ardından ikinci listenin içeriğini birinci listenin üçüncü konumuna aktarmak için ekleme işlevi çağrılır.
- Git :Bir listenin içeriğini belirli bir konumda diğerine aktarmak için kullanılabilen splice işlevinin aksine, birleştirme işlemi iki listeyi tek bir liste oluşturmak için doğrudan birleştirir. Birleştirme işlemi için her iki listenin de sıralı düzende olması gerekir.
Aşağıda, birleştirme işlevini gösteren bir örnek verilmiştir.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1,2,3,5,8}; list seclist = {4,6,7}; cout<<'First List: '; printlist(mylist); cout< Çıktı:
Birinci Liste: 11 2 3 5 8
İkinci Liste: 4 6 7
İki listeyi birleştirdikten sonra içeriği listeleyin:
1 1 2 3 4 5 6 7 8
Dolayısıyla, yukarıdaki programda sıralanmış iki listemiz var. Bu iki listede birleştirme işlemi diyoruz. Ortaya çıkan liste, her iki listenin öğelerini içeren sıralı bir listedir.
Sonuç
STL'deki Listeler hakkındaki bu öğreticinin sonuna geldik. Bu öğreticinin size STL'deki Listeler hakkında muazzam bilgi vereceğini umuyoruz.
=> Burada C ++ Eğitim Öğreticilerinin A-Z'sini Görmek İçin Burayı Kontrol Edin.
Önerilen Kaynaklar