Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden

Wat is std::list?

In C++ is std::list een sequentiecontainer die elementen opslaat als een dubbel gelinkte lijst. Deze structuur stelt je in staat om items op elke positie in constante tijd in te voegen of te verwijderen, terwijl je in beide richtingen over de lijst kunt itereren. Hoewel het geen snelle willekeurige toegang biedt zoals std::vector, uitblinkt het in scenario's waar frequente invoegingen of verwijderingen plaatsvinden.

De container beheert geheugen automatisch via een allocator, zodat deze tijdens runtime aan beide kanten kan groeien of krimpen.

Waarom std::list gebruiken?

  • Constante-tijd invoeging en verwijdering op elke positie in de sequentie.
  • Efficiënt voor algoritmen die elementen vaak verplaatsen.
  • Ideaal wanneer de grootte van de container onvoorspelbaar verandert.

Een lijst definiëren

Om std::list te gebruiken, neem je de <list> header op:

#include <list> // Sjabloondefinitie
// template<class T, class Alloc = std::allocator<T>> class list;

Parameters:

  • T – Type van de opgeslagen elementen. Elk kopieerbaar type is toegestaan.
  • Alloc – Allocatortype. De standaard std::allocator is meestal voldoende.

Voorbeeld 1: Basisiteratie

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

Uitvoer:

Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden

Algemene std::list-bewerkingen

FunctieBeschrijving
insert()Voeg een element in vóór de iterator-positie.
push_back()Voeg een element aan het einde toe.
push_front()code>Voeg een element aan het begin toe.
pop_front()Verwijder het eerste element.
size()Geef het aantal elementen terug.
front()Toegang tot het eerste element.
back()Toegang tot het laatste element.
reverse()Keer de volgorde van elementen om.
merge()Voeg twee gesorteerde lijsten samen tot één.

Constructors

  • std::list() – Standaardconstructor; maakt een lege lijst.
  • std::list(n) – Vulconstructor; maakt n standaard-geconstrueerde elementen.
  • std::list(first, last) – Bereikconstructor; kopieert elementen uit een ander bereik.
  • std::list(const list&) – Kopieerconstructor.
  • std::list(list&&) – Verhuisconstructor.
  • std::list(std::initializer_list<T>) – Initialisatielijst-constructor.

Voorbeeld 2: Constructor-varianten

#include <iostream>
#include <list>
int main() {
    std::list<int> l; // leeg
    std::list<int> l1{10, 20, 30};
    std::list<int> l2(l1.begin(), l1.end()); // bereik kopiëren
    std::list<int> l3(std::move(l1)); // verplaatsen
    std::cout << "Grootte van l: " << l.size() << '\n';
    std::cout << "Inhoud van l2:\n";
    for (int x : l2) std::cout << x << '\n';
    std::cout << "Inhoud van l3:\n";
    for (int x : l3) std::cout << x << '\n';
}

Uitvoer:

Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden

Containereigenschappen

  • Sequentieel – Elementen zijn in lineaire volgorde opgeslagen, toegankelijk per positie.
  • Dubbel gelinkte lijst – Elk knooppunt kent zijn voorganger en opvolger, wat constantetijd invoegingen/verwijderingen mogelijk maakt.
  • Allocator-bewust – Gebruikt een allocator om geheugen op te vragen wanneer nodig.

Elementen invoegen

Gebruik push_front, push_back of insert om items toe te voegen.

Voorbeeld 3: Gemengde invoegingen

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

Uitvoer:

Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden

Elementen verwijderen

Gebruik erase om enkele elementen of bereiken te verwijderen.

Voorbeeld 4: Erase-demonstratie

#include <iostream>
#include <list>
int main() {
    std::list<int> my_list{12, 5, 10, 9};
    std::cout << "Voor verwijdering:\n";
    for (int x : my_list) std::cout << x << '\n';
    my_list.erase(my_list.begin()); // verwijder eerste
    std::cout << "Na verwijdering:\n";
    for (int x : my_list) std::cout << x << '\n';
}

Uitvoer:

Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden

Belangrijkste punten

  • std::list is een dubbel gelinkte sequentiecontainer.
  • Het biedt constantetijd invoegingen/verwijderingen vanaf elke positie.
  • Sequentiële doorloop wordt in beide richtingen ondersteund.
  • Willekeurige toegang is niet efficiënt; gebruik std::vector als je snelle indexering nodig hebt.
  • Constructors, iteratoren en allocator-bewustzijn maken std::list veelzijdig voor dynamische datasets.

C Taal

  1. C++ Operators Uitgelegd: Typen, Voorbeelden en Voorbeeldprogramma's
  2. C++ do‑while Lus: Syntaxis, Praktische Voorbeelden en Geneste Lussen
  3. C++ Switch‑Case Onder de Knie: Syntaxis, Gebruik en Praktische Voorbeelden
  4. C++ Dynamische Array‑Allocatie: Praktische Handleiding met Code‑Voorbeelden
  5. C++ Pointers Onder de Knie: Concepten, Voorbeelden & Praktische Toepassingen
  6. C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden
  7. C++ Structs Uitgelegd met een Praktisch Voorbeeld
  8. C++ Functies Uitgelegd met Praktische Codevoorbeelden
  9. C++ Struct vs Class: Belangrijkste Verschillen, Syntaxis en Beste Gebruikssituaties
  10. Python Counter in collections – Efficiënt tellen, updaten en rekenkundige operaties
  11. Python list.count(): Expert Gids met Praktische Voorbeelden