Lista
Lekcja 7 z 23 w kursie C++ – Standardowa biblioteka szablonów w Coddy.
Lista to wbudowany kontener sekwencyjny C++, który umożliwia nieciągłą alokację pamięci. Mówiąc o liście, mamy na myśli listę dwukierunkową. Istnieje też inny typ listy, nazywany listą jednokierunkową (forward list).
Aby wszystko było jasne:
Struktura danych vector umożliwia ciągłą alokację pamięci, co oznacza, że każdy element znajduje się w pamięci bezpośrednio za poprzednim elementem.
Natomiast struktura danych linked list zawiera elementy składające się z części przechowującej dane (właściwą wartość) oraz wskaźnika zawierającego adres pamięci następnego elementu na liście.
W C++ istnieją dwa typy list wiązanych:
- lista dwukierunkowa -
list - lista jednokierunkowa -
forward list
Główna różnica między listą dwukierunkową a listą jednokierunkową polega na tym, że listy jednokierunkowe umożliwiają iterowanie tylko w przód, co oznacza, że każdy element ma własną wartość i adres pamięci następnego elementu. Elementy listy dwukierunkowej przechowują natomiast informacje o tym, jak znaleźć następny i poprzedni element listy.
Korzystamy z list (listy dwukierunkowej) i forward list (listy jednokierunkowej), dołączając je do pliku za pomocą:
#include <list>
#include <forward_list>Możemy też po prostu dołączyć plik nagłówkowy bits/stdc++.h.
Lista jednokierunkowa
Najpierw omówimy listę jednokierunkową. Ma ona wiele metod, a my omówimy te najbardziej przydatne.
Deklarujemy forward list dokładnie tak samo jak vector i deque.
forward_list<int> flist = {1, 2, 3};Możemy dodawać elementy za pomocą metody push_front(), a usuwać je z początku za pomocą pop_front().
flist.push_front(5);
for (int &x : flist) // wypisujemy elementy za pomocą wskaźnika, którego wartość zwiększa się przy każdej iteracji
cout << x << " ";
cout << endl;
flist.pop_front();
for (int &x : flist)
cout << x << " ";Output:
5 1 2 3
1 2 3Metody listy jednokierunkowej
| Metoda | Działanie |
| insert_after() | Wstawia element za wskazaną pozycją |
| remove() | Usuwa wskazany element |
| assign() | Służy do przypisania wskazanych wartości do listy. Można jej też użyć z dwiema liczbami całkowitymi, co oznacza przypisanie wskazanego elementu n razy |
Lista
Następna jest lista. Struktura danych list ma również wiele metod, ale poznasz te najbardziej przydatne.
Najpierw dowiesz się, jak zadeklarować listę po dołączeniu jej na początku pliku .cpp.
list<int> list1 = {1, 2, 3};Możemy dodawać elementy do listy za pomocą metody push_front() lub push_back().
Podobnie możemy usuwać pierwszy i ostatni element za pomocą odpowiednio metod pop_front() i pop_back().
list1.push_back(4);
list1.push_front(0);
for (int &x : list1)
cout << x << " ";
cout << endl;
list1.pop_front();
list1.pop_back();
for (int &x : list1)
cout << x << " ";Output:
0 1 2 3 4
1 2 3Metody listy
| Metoda | Działanie |
| front() | Zwraca wartość pierwszego elementu listy |
| back() | Zwraca wartość ostatniego elementu listy |
| empty() | Zwraca informację, czy lista jest pusta (1), czy nie (0) |
| erase() | Usuwa pojedynczy element lub zakres elementów z listy |
| remove() | Usuwa wszystkie elementy z listy |
Spróbuj swoich sił
Ta lekcja nie zawiera wyzwania z kodem.
Wszystkie lekcje w sekcji C++ – Standardowa biblioteka szablonów
Poćwicz samodzielnie: Kompilator C++ online