list

Małgorzata Piekarska

Kolejnym kontenerem udostępnianym przez STL, nieco mniej popularnym od vectorów, jest klasa list będąca listą dwukierunkową. Oto główne różnice między vectorami, a listami:

  • Dostęp do wartości zapisanych w liście jest mozliwy jedynie poprzez iterator (nie ma możliwości odwołania się do elementu poprzez podanie indeksu w kwadratowym nawiasie)
  • Dodwanie / Usuwanie elementu na końcu listy jest bardzo szybkie i odbywa się w czasie stałym (w przeciwieństwie od vectora)

Kiedy więc lepszym rozwiązaniem są wektory, a kiedy listy? Jeśli operujemy na pojedynczych elementach kontenera, lepszym rozwiązaniem są vectory, gdyż podajemy po prostu indeks do interesującego nas elementu. Gdy nasze algorytmy za każdym razem przetwarzają cały kontener od początku do końca, bez cienia wątpliwości lepszym rozwiązaniem są listy. Jeżeli zdarza się, że dodajemy/usuwamy elementy umieszczone gdzieś w środku kontenera, tutaj bez wątpienia powinniśmy wybrać listy.

Sposób korzystania z list jest niemal identyczny jak w przypadku vectorów:

  • void push_back(const T obj) - dodaje na końcu listy kopię przekazanego argumentu
  • void pop_back() - usuwa ostatni element z listy
  • void push_front(const T obj) - dodaje na początku listy kopię przekazanego argumentu
  • void pop_front() - usuwa pierwszy element listy
  • void clear() - usuwa wszystkie elementy z listy
  • void remove(const T& wartosc) - usuwa wszystkie elementy równe argumentowi wartosc
  • void remove_if(Functor func) - usuwa wszystkie elementy dla których func (bool funkcja(T arg)) zwróci true (patrz: sort)
  • void unique() - usuwa wszystkie następujące po sobie elementy o równych wartościach poza pierwszym spośród nich
  • void assign(size_t n, const T obj) - czyści listę i wypełnia ją n kopiami argumentu obj
  • void insert(iterator pos, size_t n, const T obj) - wstawia n kopii argumentu obj przed pozycją wskazywaną przez iterator pos
  • void insert(iterator pos, iterator poczatek, iterator koniec) - wstawia przed pozycją wskazywaną przez iterator pos elementy między iteratorami początek i koniec (włącznie)
  • iterator erase(iterator pos) - usuwa element wskazywany przez pos i zwraca iterator do następnego elementu
  • iterator erase(iterator poczatek, iterator koniec) - usuwa elementy z przedziału <poczatek;koniec> i zwraca iterator do elementu za nimi
  • void reverse() - odwraca kolejność wszystkich elementów (wykonywane w stałym czasie)
  • void sort() - sortuje elementy listy
  • void sort(Functor func) - sortuje elementy listy przy użyciu przekazanej funkcji (bool funkcja(T arg1, T arg2)), może to być wskaźnik na funkcję lub obiekt ze zdefiniowanym operatorem(); zwracana wartość tejże funkcji ma określać czy arg1 < arg2
  • void swap(list<T> ls) - zamienia zawartości dwóch list miejscami (wykonywane szybko, w stałym czasie)
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License