Std :: list w C ++ z przykładem

Spisie treści:

Anonim

Co to jest std :: list?

W C ++ std :: list odnosi się do kontenera magazynu. Std: list umożliwia wstawianie i usuwanie elementów z dowolnego miejsca. Lista std :: list jest zaimplementowana jako lista podwójnie połączona. Oznacza to, że dostęp do danych listowych można uzyskać dwukierunkowo i sekwencyjnie.

Lista Biblioteka szablonów standardowych nie obsługuje szybkiego dostępu losowego, ale obsługuje dostęp sekwencyjny ze wszystkich kierunków.

Możesz rozrzucać elementy listy w różnych fragmentach pamięci. Informacje potrzebne do sekwencyjnego dostępu do danych są przechowywane w kontenerze. Std :: list może się rozszerzać i zmniejszać z obu końców w razie potrzeby w czasie wykonywania. Wewnętrzny podzielnik automatycznie spełnia wymagania magazynowe.

W tym samouczku C ++ nauczysz się:

  • Co to jest std :: list?
  • Dlaczego warto używać std :: list?
  • Składnia listy
  • Funkcje listy C ++
  • Konstruktorzy
  • Właściwości kontenera
  • Wstawianie do listy
  • Usuwanie z listy

Dlaczego warto używać std :: list?

Oto powód użycia std :: List:

  • Std :: list działa lepiej w porównaniu z innymi kontenerami sekwencji, takimi jak tablica i wektor.
  • Mają lepszą wydajność podczas wstawiania, przesuwania i wyciągania elementów z dowolnej pozycji.
  • Std :: list radzi sobie również lepiej z algorytmami, które intensywnie wykonują takie operacje.

Składnia listy

Aby zdefiniować std :: list, musimy zaimportować plik nagłówkowy . Oto składnia definicji std :: list:

template < class Type, class Alloc =allocator > class list;

Oto opis powyższych parametrów:

  • T - określa typ zawartego elementu.

    Możesz zastąpić T dowolnym typem danych, nawet typami zdefiniowanymi przez użytkownika.

  • Przydziel - definiuje typ obiektu alokatora.

    Domyślnie używa to szablonu klasy alokatora. Jest zależny od wartości i używa prostego modelu alokacji pamięci.

Przykłady 1:

#include #include #include 
int main() {std::list my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}

Wynik:

Oto zrzut ekranu kodu:

Objaśnienie kodu:

  1. Dołącz plik nagłówkowy algorytmu, aby użyć jego funkcji.
  2. Dołącz plik nagłówkowy iostream, aby korzystać z jego funkcji.
  3. Dołącz plik nagłówka listy, aby korzystać z jego funkcji.
  4. Wywołaj funkcję main (). Logikę programu należy dodać w treści tej funkcji.
  5. Utwórz listę o nazwie my_list z zestawem 4 liczb całkowitych.
  6. Użyj pętli for, aby utworzyć zmienną pętli x. Ta zmienna będzie używana do iteracji po elementach listy.
  7. Wydrukuj wartości listy na konsoli.
  8. Koniec treści pętli for.
  9. Koniec treści funkcji main ().

Funkcje listy C ++

Oto typowe funkcje std :: list:

Funkcjonować Opis
wstawić() Ta funkcja wstawia nowy element przed pozycją wskazywaną przez iterator.
push_back () Ta funkcja dodaje nową pozycję na końcu listy.
push_front () Dodaje nową pozycję na początku listy.
pop_front () Usuwa pierwszą pozycję z listy.
rozmiar() Ta funkcja określa liczbę elementów listy.
z przodu() Aby określić pierwsze pozycje listy.
z powrotem() Aby określić ostatnią pozycję listy.
odwrócić() Odwraca elementy listy.
łączyć() Łączy dwie posortowane listy.

Konstruktorzy

Oto lista funkcji dostarczonych przez plik nagłówkowy :

  • Domyślny konstruktor std :: list :: list () - Tworzy pustą listę, która ma zero elementów.
  • Konstruktor wypełnienia std :: list :: list () - tworzy listę zawierającą n elementów i przypisuje każdemu elementowi wartość zero (0).
  • Konstruktor zakresu std :: list :: list () - tworzy listę z wieloma elementami w zakresie od pierwszego do ostatniego.
  • Konstruktor kopiujący std :: list :: list () - tworzy listę z kopią każdego elementu zawartego na istniejącej liście.
  • Konstruktor ruchu std :: list :: list () - tworzy listę z elementami innej listy przy użyciu semantyki przenoszenia.
  • Konstruktor listy inicjalizacyjnej std :: list :: list () - tworzy listę z elementami innej listy przy użyciu semantyki przenoszenia.

Przykład 2:

#include #include 
using namespace std;int main(void) {list l;list l1 = { 10, 20, 30 };list l2(l1.begin(), l1.end());list l3(move(l1));cout << "Size of list l: " << l.size() << endl;cout << "List l2 contents: " << endl;for (auto it = l2.begin(); it != l2.end(); ++it)cout << *it << endl;cout << "List l3 contents: " << endl;for (auto it = l3.begin(); it != l3.end(); ++it)cout << *it << endl;return 0;}

Wynik:

Oto zrzut ekranu kodu:

Objaśnienie kodu:

  1. Dołącz plik nagłówkowy iostream, aby korzystać z jego funkcji.
  2. Dołącz plik nagłówka listy, aby korzystać z jego funkcji.
  3. Uwzględnij w kodzie przestrzeń nazw std, aby używać jej klas bez wywoływania jej.
  4. Wywołaj funkcję main (). Logikę programu należy dodać w treści tej funkcji.
  5. Utwórz pustą listę o nazwie l.
  6. Utwórz listę o nazwie l1 z zestawem 3 liczb całkowitych.
  7. Utwórz listę o nazwie l2 ze wszystkimi elementami na liście o nazwie l1, od początku do końca.
  8. Utwórz listę o nazwie l3 przy użyciu semantyki przenoszenia. Lista l3 będzie miała taką samą zawartość jak lista l2.
  9. Wydrukuj rozmiar listy o nazwie l na konsoli obok innego tekstu.
  10. Wydrukuj tekst na konsoli.
  11. Utwórz iterator o nazwie go i użyj go do iteracji po elementach listy o nazwie l2.
  12. Wydrukuj elementy listy o nazwie l2 na konsoli.
  13. Wydrukuj tekst na konsoli.
  14. Utwórz iterator o nazwie go i użyj go do iteracji po elementach listy o nazwie l3.
  15. Wydrukuj elementy listy o nazwie l3 na konsoli.
  16. Program musi zwrócić wartość po pomyślnym zakończeniu.
  17. Koniec treści funkcji main ().

Właściwości kontenera

Oto lista właściwości kontenera:

własność Opis
Sekwencja Kontenery sekwencji porządkują swoje elementy w ściśle liniowej kolejności. Dostęp do elementów uzyskuje się na podstawie ich pozycji w sekwencji.
Lista podwójnie połączona Każdy element zawiera informacje o tym, jak zlokalizować poprzednie i następne elementy. Pozwala to na stały czas operacji wstawiania i usuwania.
Uwzględniający alokatora Obiekt alokatora służy do dynamicznej modyfikacji rozmiaru pamięci.

Wstawianie do listy

Istnieją różne funkcje, których możemy użyć do wstawienia wartości do listy. Pokażmy to:

Przykład 3:

#include #include #include 
int main() {std::list my_list = { 12, 5, 10, 9 };my_list.push_front(11);my_list.push_back(18);auto it = std::find(my_list.begin(), my_list.end(), 10);if (it != my_list.end()) {my_list.insert(it, 21);}for (int x : my_list) {std::cout << x << '\n';}}

Wynik:

Oto zrzut ekranu kodu:

Objaśnienie kodu:

  1. Dołącz plik nagłówkowy algorytmu, aby użyć jego funkcji.
  2. Dołącz plik nagłówkowy iostream, aby korzystać z jego funkcji.
  3. Dołącz plik nagłówka listy, aby korzystać z jego funkcji.
  4. Wywołaj funkcję main (). Logikę programu należy dodać w treści tej funkcji.
  5. Utwórz listę o nazwie my_list z zestawem 4 liczb całkowitych.
  6. Wstaw element 11 na początek listy o nazwie my_list.
  7. Wstaw element 18 na koniec listy o nazwie my_list.
  8. Utwórz iterator i użyj go do znalezienia elementu 10 z listy my_list.
  9. Użyj instrukcji if, aby określić, czy powyższy element został znaleziony, czy nie.
  10. Wstaw element 21 przed powyższym elementem, jeśli został znaleziony.
  11. Koniec treści instrukcji if.
  12. Użyj pętli for, aby utworzyć zmienną pętli x. Ta zmienna będzie używana do iteracji po elementach listy.
  13. Wydrukuj wartości listy na konsoli.
  14. Koniec treści pętli for.
  15. Koniec treści funkcji main ().

Usuwanie z listy

Możliwe jest usuwanie pozycji z listy. Funkcja erase () umożliwia usunięcie elementu lub zakresu elementów z listy.

  • Aby usunąć pojedynczy element, wystarczy przekazać jedną pozycję całkowitą. Pozycja zostanie usunięta.
  • Aby usunąć zakres, należy przekazać początkowe i końcowe iteratory. Pokażmy to.

Przykład 4:

#include #include #include 
using namespace std;int main() {std::list my_list = { 12, 5, 10, 9 };cout << "List elements before deletion: ";for (int x : my_list) {std::cout << x << '\n';}list::iterator i = my_list.begin();my_list.erase(i);cout << "\nList elements after deletion: ";for (int x : my_list) {std::cout << x << '\n';}return 0;}

Wynik:

Oto zrzut ekranu kodu:

Objaśnienie kodu:

  1. Dołącz plik nagłówkowy algorytmu, aby użyć jego funkcji.
  2. Dołącz plik nagłówkowy iostream, aby korzystać z jego funkcji.
  3. Dołącz plik nagłówka listy, aby korzystać z jego funkcji.
  4. Dołącz przestrzeń nazw std do naszego programu, aby używać jej klas bez wywoływania jej.
  5. Wywołaj funkcję main (). Logikę programu należy dodać w treści tej funkcji.
  6. Utwórz listę o nazwie my_list z zestawem 4 liczb całkowitych.
  7. Wydrukuj tekst na konsoli.
  8. Użyj pętli for, aby utworzyć zmienną pętli x. Ta zmienna będzie używana do iteracji po elementach listy.
  9. Wydrukuj wartości listy na konsoli.
  10. Koniec treści pętli for.
  11. Utwórz iterator i, który wskazuje na pierwszy element listy.
  12. Użyj funkcji erase () wskazywanej przez iterator i.
  13. Wydrukuj tekst na konsoli.
  14. Użyj pętli for, aby utworzyć zmienną pętli x. Ta zmienna będzie używana do iteracji po elementach listy.
  15. Wydrukuj wartości listy na konsoli. To następuje po usunięciu.
  16. Koniec treści pętli for.
  17. Program musi zwrócić wartość po pomyślnym zakończeniu.
  18. Koniec treści funkcji main ().

Podsumowanie:

  • Std :: list to kontener do przechowywania.
  • Umożliwia wstawianie i usuwanie elementów z dowolnego miejsca w stałym czasie.
  • Jest zaimplementowany jako podwójny link
  • Dostęp do danych std :: list można uzyskać dwukierunkowo i sekwencyjnie.
  • std :: list nie obsługuje szybkiego dostępu losowego. Jednak obsługuje sekwencyjny dostęp ze wszystkich kierunków.
  • Możesz rozrzucić elementy listy std :: list w różnych fragmentach pamięci.
  • W razie potrzeby można zmniejszyć lub rozszerzyć std :: list z obu końców w czasie wykonywania.
  • Aby wstawić elementy do std :: list, używamy funkcji insert ().
  • Aby usunąć elementy ze std :: list, używamy funkcji erase ().