Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs programowania - C++

C++: Lista jednokierunkowa i dwukierunkowa

Lista dwukierunkowa w C++: std::list

W świecie C++, std::list jest kontenerem sekwencyjnym, który zapewnia elastyczną obsługę danych. Ta lista dwukierunkowa oferuje unikalną funkcjonalność, umożliwiając dostęp do elementów zarówno od początku, jak i od końca. Dzięki temu, że przechowuje dane w sposób nieliniowy, std::list jest idealna w sytuacjach, gdzie często wymagane jest wstawianie lub usuwanie elementów.

 

Operacje na std::list

std::list udostępnia szereg operacji:

  • Wstawianie Elementów: Metody takie jak push_back(), push_front() i insert() pozwalają na dodanie nowych elementów zarówno na końcu, jak i na początku listy, a także w dowolnym innym miejscu.
  • Usuwanie Elementów: Można łatwo usuwać elementy za pomocą funkcji pop_back(), pop_front() i erase(), co jest kluczowe w dynamicznych aplikacjach, gdzie zawartość listy często ulega zmianie.
  • Iteracja: Lista dwukierunkowa umożliwia iterację w obu kierunkach, co jest szczególnie przydatne w przypadkach, gdy wymagane jest przeglądanie lub modyfikowanie danych w różnych sekwencjach.

 

Przykład Użycia std::list

Zobaczmy, jak w praktyce wykorzystać std::list

#include <list>
#include <iostream>

int main() {
    std::list<int> liczby = {1, 2, 3};
    liczby.push_front(0);  // Dodanie na początku listy
    liczby.push_back(4);   // Dodanie na końcu listy

    // Iteracja i wyświetlenie elementów listy
    for (auto it = liczby.begin(); it != liczby.end(); ++it) {
        std::cout << *it << " ";
    }
}

Kod demonstruje użycie kontenera std::list z biblioteki standardowej C++. std::list jest listą dwukierunkową, co oznacza, że każdy element zawiera odniesienia zarówno do poprzedniego, jak i następnego elementu w sekwencji.

 

Analiza kodu
  1. Załączenie nagłówka <list>, który zawiera definicję szablonu std::list.
  2. Załączenie nagłówka <iostream>, aby umożliwić wykorzystanie operacji wejścia-wyjścia, w tym standardowego strumienia wyjściowego std::cout.
  3. Rozpoczęcie funkcji main, która jest punktem wejścia każdego programu w C++.
  4. Deklaracja i inicjalizacja listy dwukierunkowej liczby typu int z początkowymi wartościami {1, 2, 3}.
  5. Dodanie wartości 0 na początek listy liczby za pomocą metody push_front().
  6. Dodanie wartości 4 na koniec listy liczby za pomocą metody push_back().
  7. Rozpoczęcie pętli for, w której tworzony jest iterator it do przechodzenia przez listę liczby. Pętla kontynuuje, dopóki iterator nie osiągnie końca listy (liczby.end()).
  8. Wyświetlenie wartości, na którą wskazuje iterator (element listy), po czym dodanie spacji. Operator dereferencji * jest używany do dostępu do wartości wskazywanej przez iterator.
  9. Zakończenie funkcji main.

 

Zawartość Listy na Poszczególnych Etapach
  1. Po Inicjalizacji: liczby = {1, 2, 3}
    Lista zawiera trzy elementy: 1, 2, 3.

  2. Po push_front(0): liczby = {0, 1, 2, 3}
    Na początku listy zostaje dodany element 0.

  3. Po push_back(4): liczby = {0, 1, 2, 3, 4}
    Na końcu listy zostaje dodany element 4.

 

Efekt Wykonania Kodu

Efektem wykonania powyższego kodu jest wypisanie na ekranie zawartości listy. Każdy element listy zostanie wyświetlony w kolejności, w jakiej znajduje się na liście, każdy oddzielony spacją. Oto wynik:

0 1 2 3 4 

 

 

Lista jednokierunkowa w C++: std::forward_list

Lista jednokierunkowa, zaimplementowana w C++ jako std::forward_list, jest kontenerem sekwencyjnym, który przechowuje dane w sposób liniowy. W przeciwieństwie do listy dwukierunkowej, lista jednokierunkowa pozwala na przemieszczanie się tylko w jednym kierunku: od początku do końca. Jest to struktura danych idealna dla operacji, które nie wymagają dostępu do poprzednich elementów sekwencji.

 

Operacje na std::forward_list
  • Wstawianie Elementów: Metody takie jak push_front() i insert_after() umożliwiają dodawanie nowych elementów na początku listy lub za określonym elementem.
  • Usuwanie Elementów: Funkcje pop_front() i erase_after() służą do usuwania elementów z listy.
  • Iteracja: Lista jednokierunkowa umożliwia iterację od początku do końca za pomocą iteratorów.

 

Przykład Użycia std::forward_list

Poniższy kod pokazuje, jak korzystać z listy jednokierunkowej w C++:

#include <forward_list>
#include <iostream>

int main() {
    std::forward_list<int> liczby = {3, 2, 1};
    liczby.push_front(0); // Dodanie na początku listy

    // Iteracja i wyświetlenie elementów listy
    for (auto it = liczby.begin(); it != liczby.end(); ++it) {
        std::cout << *it << " ";
    }
    return 0;
}

 

Analiza Kodu
  • Włączenie nagłówka <forward_list>, który zawiera definicję std::forward_list.
  • Inicjalizacja listy jednokierunkowej liczby z wartościami {3, 2, 1}.
  • Dodanie elementu 0 na początku listy za pomocą push_front().
  • Iteracja po liście i wyświetlenie jej elementów.

 

Zawartość Listy na Poszczególnych Etapach
  • Po Inicjalizacji: liczby = {3, 2, 1}
  • Po push_front(0): liczby = {0, 3, 2, 1}

 

Efekt Wykonania Kodu

Efektem działania programu jest wyświetlenie na ekranie zawartości listy jednokierunkowej, z elementami wypisanymi w kolejności, w jakiej zostały dodane: "0 3 2 1".

Testy przypięte do lekcji
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się
Aby widzieć ocenę lekcji - Zaloguj się