Ana sayfa > Programlama > C++ Programlama > Listeler

Listeler

► Detaylı anlatım

Listeler hakkında

List sınıfı, çift yönlü ve doğrusal bir liste sağlar. Bir listedeki elemanlara sadece sıralı olarak erişim sağlanabilir. Elemanlara rastgele erişim yapılamaz. Çift yönlü olduğu için baştan sona veya sondan başa doğru erişi sağlanabilir.

Bir list sınıfı için şablon bildiriminin genel yapısı aşağıda gösterilmektedir:

template <class T, class Allocator = allocator<T>> class list

T: Listeye kaydedilen veri türünü gösterir.

allocator: Tahsis ediciyi ifade eder.

List konteynerleri aşağıdaki constructor fonksiyonlarını içerir:

explicit list(const Allocator &a = Allocator());

explicit list(size_type num, const T &val = T(), const Allocator &a = Allocator());

list(const list &nes);

template list(InIter start, InIter end, const Allocator &a = Allocator());

İlk yapı boş bir liste oluşturur. İkinci yapı, val değerine sahip num kadar elemanlı bir liste oluşturur. Üçüncü yapı, nes nesnesi ile aynı elemanları içeren bir liste oluşturur. Dördüncü yapı, start ve end tekrarlayıcıları ile gösterilen aralıktaki elemanları içeren bir liste oluşturur.

Aşağıdaki işlemciler listelerle birlikte kullanılabilir:

==, <, <=, !=, >, >=

Azami esneklik ve taşınabilirlik amacıyla, bir listeye depolanacak herhangi bir nesne, varsayılan bir constructor fonksiyonu tanımlamalıdır.

List sınıfı içinde tanımlanan bazı üye fonksiyonlar aşağıdaki tabloda yer almaktadır:

Üye fonksiyon Açıklama
reference back();
const_reference back() const;
Listedeki son elemanın referansını geri döndürür.
iterator begin();
const_iterator begin() const;
Listedeki ilk elemanı gösteren bir tekrarlayıcı geri döndürür.
void clear(); Listedeki tüm elemanları siler.
bool empty() const; Eğer çağıran liste boş ise doğru, aksi takdirde yanlış bir değer geri döndürür.
iterator end();
const_iterator end() const;
Listenin sonunu gösteren bir tekrarlayıcı geri döndürür.
iterator erase(iterator i); i ile gösterilen elemanı siler.
Silinen elemandan sonraki elemanı gösteren bir tekrarlayıcı geri döndürür.
iterator erase(iterator start, iterator end); start ile end arasındaki elemanları siler.
Silinen en son elemandan sonraki elemanı gösteren bir tekrarlayıcı geri döndürür.
reference front();
const_reference front() const;
Listedeki ilk elemanı gösteren bir referans geri döndürür.
iterator insert(iterator i, const T &val); i ile gösterilen elemandan hemen önce val değerini ekler.
Elemanı gösteren bir tekrarlayıcı geri döndürür.
void insert(iterator i, size_type num, const T &val) i ile gösterilen elemandan hemen önce num değeri kadar val değerini ekler.
template void insert(iterator i, InIter start, InIter end); i ile gösterilen elemandan önce start ve end ile gösterilen sırayı ekler.
void merge(list<T, Allocator> &ob);
template <class Comp> void merge(list<T, Allocator> &ob, Comp cmpfn);
  • ob nesnesinde yer alan sıralı listeyi sıralı çağırma listesiyle birleştirir.
  • Elde edilen liste sıralı olur.
  • Birleştirmeden sonra ob nesnesi içinde bulunan liste boştur.
  • İkinci yapıda, bir elemanın diğerinden ne zaman küçük olduğunu belirleyen bir karşılaştırma fonksiyonu tanımlanabilir.
void pop_back(); Listedeki son elemanı siler.
void pop_front(); Listedeki ilk elemanı siler.
void push_back(const T &val); val ile gösterilen değeri listenin sonuna ekler.
void push_front(const T &val); val ile gösterilen değeri listenin başına ekler.
void remove(const T &val); val ile gösterilen elemanları listeden siler.
void reverse(); Çağıran listeyi ters çevirir.
size_type size() const; Listede yer alan eleman sayısını geri döndürür.
void sort();
template <class Comp> void sort(Comp cmpfn);
Listeyi sıralar.
İkinci yapıda, bir elemanın diğerinden ne zaman küçük olduğunu belirleyen bir karşılaştırma fonksiyonu tanımlanabilir.
void splice(iterator i, list<T, Allocator> &ob); ob içeriği çağıran listede i ile gösterilen yere eklenir. İşlemden sonra ob boş olur.
void splice(iterator i, list<T, Allocator> &ob, iterator el); el ile gösterilen eleman ob listesinden çıkarılır ve i ile gösterilen konumda çağırma listesine eklenir.
void splice(iterator i, list<T, Allocator> &ob, iterator start, iterator end); start ve end ile tanımlanan aralık ob ile gösterilen listeden silinir ve i ile gösterilen konumdan başlayan çağırma listesine eklenir.

Liste oluşturma ve değer atama

Listeleri oluştururken, boş veya belirli bir sayıda elemana sahip olacak şekilde tanımlayabiliriz. Listeyi boş olarak tanımlarsak, eleman eklemek için push_back() fonksiyonunu kullanabiliriz. Listeyi eleman içerecek şekilde tanımlarsak, elemanlara değer atamak için, tekrarlayıcıları kullanabiliriz. Bu durumda, önce begin() fonksiyonuyla listedeki ilk elemanın bellek adresi bir tekrarlayıcıya atanır. Tekrarlayıcının değeri her artırıldığında, listedeki bir sonraki elemana erişim sağlanarak değer atanır.

Şimdi, elemanlı bir liste oluşturma, liste elemanlarına değer atama ve eleman değerlerini ekran yazma işlemlerinin gerçekleştirildiği bir örneği incelemeye çalışalım:


#include <iostream>
#include <list>

using namespace std;

int main(void)
{
  list<int> il(10);        // 10 elemanlı bir int liste bildirimi yapar.
  list<int>::iterator ipl; // Tekrarlayıcı bildirimi yapar.
  int id;

  // il listesinin eleman sayısını yazar.
  cout << "il liste eleman sayısı: " << il.size() << endl;

  // Listeye değer atama işlemi
  for (ipl=il.begin(), id=1; ipl!=il.end(); ) {
       *ipl++ = id++;
  }

  // Liste içeriğini ekrana yazma
  cout << "Liste içeriği: ";
  for (ipl=il.begin(); ipl!=il.end(); ) {
       cout << *ipl++ << " ";
  }

  return 0;
}

Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:

il liste eleman sayısı: 10
Liste içeriği: 1 2 3 4 5 6 7 8 9 10 

Program, 10 elemanlı bir int liste ve bir int tekrarlayıcı bildirimi yapar. Listenin eleman sayısını size() fonksiyonu ile ekrana yazar. Bir for döngüsü içinde, begin() fonksiyonu ile listedeki ilk eleman bellek adresini tekrarlayıcıya atar. Tekrarlayıcı end() fonksiyonu ile elde edilen değerden farklı olduğu sürece, liste sonuna gelene kadar, her bir elemana sırasıyla 1-10 arasındaki sayıları atar. Aynı yöntemle liste eleman değerlerini bir for döngüsü kullanarak ekrana yazar.