List

Autor: Kacper Szkudlarek
List to rodzaj kontenera, który przechowuje dane w liniowej sekwencji. Kontener jest zaimplementowany na zasadzie listy dwukierunkowej, każdy element zawiera wskaźnik na obiekt następny i poprzedni.

Zalety korzystania z kontenera list:


Implementacja listy w bibliotece standardowej to szablon z dwoma parametrami.

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

gdzie T to typ elementu jaki będziemy przechowywać, a Allocator definiuje sposob przydzielania pamięci dla nowych elementów. Domyślnie jest on już jest on już zdefiniowany.

Przykładowy program pokazujący działanie kontenera list: list.cpp

Metody

List udostępnia następujące metody którymi możemy manipulować jego zawartością.

KonstruktoryTworzą liste i inicjalizują przekazanymi danymi.
operator=Kopiuje zawartość konera

Iteratory

begin Zwraca iterator na peirwszy element
end Zwraca iterator na ostatni element
rbegin Zwraca reverse_iterator na odwrócony początek
rend Zwraca reverse_iterator na odwrócony koniec

Pojemność

empty Sprawdza czy lista zawiera jakieś elementy
sizeZwraca rozmiar kontenera
max_sizeZwraca maksymalny możliwy rozmiar kontenera
resizeZmienia rozmiar kontenera

Dostęp do elementów

frontDostęp do pierwszego elementu listy
backDostęp do ostatniego elementu listy

Modifiers

assignPrzydziela nową zawartość do kontenera
push_frontWstawia element na początku
pop_frontUsuwa pierwszy element
push_backDodaje element na końcu
pop_backUsuwa ostatni element
insertWstawia elementy
eraseUsuwa elementy
swapZamienia zawartość listy
clearUsuwa wszystkie elementy z listy

Operacje na liście

splicePrzenosi elementy pomiędzy listami
removeUsuwa elementy o określonej wartości
remove_ifUsuwa elementy spełniające warunek
uniqueUsuwa powtarzające się wartości
mergeŁączy posortowane listy
sortSortuje listę
reverseOdwraca kolejność elementów

Konstruktory

operator=

list<T,Allocator>& operator= ( const list<T,Allocator>& x );

Przypisuje kontenerowi kopię kontenera podanego jako argument x. Całą pierwotna zawartość kontenera jest kasowana.

begin

iterator begin();
const_iterator begin() const;

Funkcja zwraca iterator do pierwszego elementu listy.

end

iterator end();
const_iterator end() const;

Funkcja zwraca iterator wskazujący za ostatni element Listy, co ułatwia iterację.

rbegin

reverse_iterator rbegin();
const_reverse_iterator rbegin() const;

Funkcja zwraca odwrotny iterator wskazujący na koniec listy.

rend

reverse_iterator rend();
const_reverse_iterator rend() const;

Funkcja zwraca odwrotny iterator wskazujący na początek listy.

empty

bool empty() const;

Funkcja zwraca wartość logiczną true jeśli lista jest pusty, false w przeciwnym przypadku.

size

size_type size() const;

Funkcja zwraca liczbę elementów znajdujących się w kontenerz.

max_size

size_type max_size () const;

Funkcja zwraca potencjalną maksymalną liczbę elementów jakie mogą znajdować się w Kontenerze. Wielkość ta zależna jest od systemu i implemnetacji.
Podobne: capacity, max_size

resize

void resize ( size_type sz, T c = T() );

Funkcja zmienia rozmiar listy do rozmiaru sz.
Jeśli wartość sz jest większa od aktualnego rozmiaru, to nowe elementy będą miały wartość c. W przeciwnym wypadku wielkość kontenera jest redukowana, a nadmiarowe elementy usuwane.

front

      reference front ( );
const_reference front ( ) const;

Funkcja zwraca referencje do pierwszego elementu w liście.

back

      reference back ( );
const_reference back ( ) const;

Funkcja zwraca referencje do ostatniego elementu w liście.

assign

void assign( size_type num, const TYPE& val );
void assign( input_iterator start, input_iterator end );

Metoda assign() wstawia do listy:

push_front

void push_front ( const T& x );

Funkcja dodaje element o wartości x na początek listy.

pop_front

void pop_front();

Funkcja usuwa pierwszy element z listy.

push_back

void push_back ( const T& x );

Funkcja dodaje element o wartości x na koniec listy.

pop_back

void pop_back();

Funkcja usuwa ostatni element z listy.

insert

erase

Funkcja zwraca iterator do pierwszego nie usuniętego elementu.

swap

void swap ( list<T,Allocator>& lst );

Funkcja zamienia zawartość listy z której był wywołany z zawartością listy podanej jako parametr lst.

clear

void clear();

Funkcja usuwa wszystkie elementy listy.

splice

remove

void remove ( const T& value );

Funkcja usuwa elementy o wartości value. Wywoływane są destruktory tych elementów, zmniejszana jest wartość size.

remove_if

template <class Predicate> void remove_if ( Predicate pred );

Usuwa elementy spełniające warunek pred. Warunek może być zaimplementowany jako dowolny typ wyrażenia pobeirającego jako argument element typu listy i zwracający wartość bool.

unique

merge

sort

reverse

void reverse();

Funkcja odwraca kolejność elementów w liście.