Wat is een std :: list?
In C ++ verwijst de std :: list naar een opslagcontainer. Met de std: -lijst kunt u overal items invoegen en verwijderen. De std :: list is geïmplementeerd als een dubbelgekoppelde lijst. Dit betekent dat lijstgegevens bidirectioneel en sequentieel toegankelijk zijn.
De lijst met standaardsjablonenbibliotheek ondersteunt geen snelle willekeurige toegang, maar wel sequentiële toegang vanuit alle richtingen.
U kunt lijstelementen in verschillende geheugenblokken verspreiden. De informatie die nodig is voor opeenvolgende toegang tot gegevens wordt opgeslagen in een container. De std :: -lijst kan tijdens runtime aan beide uiteinden worden vergroot en verkleind. Een interne allocator voldoet automatisch aan de opslagvereisten.
In deze C ++ tutorial leer je:
- Wat is een std :: list?
- Waarom std :: list gebruiken?
- Syntaxis van lijst
- C ++ Lijstfuncties
-
Constructeurs - Containereigenschappen
- Invoegen in een lijst
- Verwijderen uit een lijst
Waarom std :: list gebruiken?
Hier zijn de redenen om std :: List te gebruiken:
- De std :: list is beter te vergelijken met andere sequentiecontainers zoals array en vector.
- Ze presteren beter bij het invoegen, verplaatsen en extraheren van elementen vanuit elke positie.
- De std :: list doet het ook beter met algoritmen die dergelijke bewerkingen intensief uitvoeren.
Syntaxis van lijst
Om de std :: list te definiëren, moeten we het
header-bestand importeren. Hier is de syntaxis van de definitie van std :: list:
template < class Type, class Alloc =allocator> class list;
Hier is een beschrijving van de bovenstaande parameters:
- T - Bepaalt het type element dat is opgenomen.
U kunt T vervangen door elk gegevenstype, zelfs door de gebruiker gedefinieerde typen.
- Alloc - Definieert het type van het allocator-object.
Dit maakt standaard gebruik van de allocator class template. Het is waardeafhankelijk en maakt gebruik van een eenvoudig geheugentoewijzingsmodel.
Voorbeelden 1:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Voeg het koptekstbestand van het algoritme toe om de functies ervan te gebruiken.
- Voeg het iostream-headerbestand toe om de functies ervan te gebruiken.
- Voeg het lijstkopbestand toe om de functies ervan te gebruiken.
- Roep de functie main () aan. De programmalogica moet worden toegevoegd in de body van deze functie.
- Maak een lijst met de naam my_list met een set van 4 gehele getallen.
- Gebruik een for-lus om een lusvariabele x te maken. Deze variabele wordt gebruikt om de lijstelementen te herhalen.
- Druk de waarden van de lijst op de console af.
- Einde van de body van de for a loop.
- Einde van de hoofdtekst van de functie main ().
C ++ Lijstfuncties
Hier zijn de algemene std :: list-functies:
Functie | Omschrijving |
invoegen () | Deze functie voegt een nieuw item in voor de positie die de iterator aangeeft. |
terugduwen() | Deze functie voegt een nieuw item toe aan het einde van de lijst. |
push_front () | Het voegt een nieuw item toe aan de voorkant van de lijst. |
pop_front () | Het verwijdert het eerste item van de lijst. |
grootte() | Deze functie bepaalt het aantal lijstelementen. |
voorkant() | Om de eerste items van de lijst te bepalen. |
terug() | Om het laatste item van de lijst te bepalen. |
omgekeerde() | Het keert de lijstitems om. |
samenvoegen() | Het voegt twee gesorteerde lijsten samen. |
Constructeurs
Hier is de lijst met functies die worden geboden door het
header-bestand:
- Default constructor std :: list :: list () - Het creëert een lege lijst, die, met nul elementen.
- Fill constructor std :: list :: list () - Het maakt een lijst met n elementen en wijst een waarde van nul (0) toe aan elk element.
- Range constructor std :: list :: list () - maakt een lijst met veel elementen in het bereik van eerste tot laatste.
- Kopieer constructor std :: list :: list () - Het maakt een lijst met een kopie van elk element in de bestaande lijst.
- Move constructor std :: list :: list () - maakt een lijst met de elementen van een andere lijst met behulp van verplaatsingssemantiek.
- Initializer list constructor std :: list :: list () - Het maakt een lijst met de elementen van een andere lijst met behulp van verplaatsingssemantiek.
Voorbeeld 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;}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Voeg het iostream-headerbestand toe om de functies ervan te gebruiken.
- Voeg het lijstkopbestand toe om de functies ervan te gebruiken.
- Neem de std-naamruimte op in de code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main () aan. De programmalogica moet worden toegevoegd in de body van deze functie.
- Maak een lege lijst met de naam l.
- Maak een lijst met de naam l1 met een set van 3 gehele getallen.
- Maak een lijst met de naam l2 met alle elementen in de lijst met de naam l1, van het begin tot het einde.
- Maak een lijst met de naam l3 met behulp van verplaatsingssemantiek. De lijst l3 zal dezelfde inhoud hebben als de lijst l2.
- Druk de grootte van de lijst met de naam l af op de console naast andere tekst.
- Druk wat tekst af op de console.
- Maak een iterator met de naam en gebruik deze om de elementen van de lijst met de naam l2 te herhalen.
- Druk de elementen van de lijst met de naam l2 af op de console.
- Druk wat tekst af op de console.
- Maak een iterator met de naam en gebruik deze om de elementen van de lijst met de naam l3 te herhalen.
- Druk de elementen van de lijst met de naam l3 af op de console.
- Het programma moet waarde teruggeven na succesvolle voltooiing.
- Einde van de hoofdtekst van de functie main ().
Containereigenschappen
Hier is de lijst met container-eigenschappen:
Eigendom | Omschrijving |
Volgorde | Volgordecontainers ordenen hun elementen in een strikte lineaire volgorde. Elementen zijn toegankelijk op basis van hun positie in de reeks. |
Dubbel gelinkte lijst | Elk element heeft informatie over het lokaliseren van vorige en volgende elementen. Dit zorgt voor een constante tijd voor invoeg- en verwijderingsbewerkingen. |
Allocator-bewust | Een allocator-object wordt gebruikt voor het dynamisch wijzigen van de opslaggrootte. |
Invoegen in een lijst
Er zijn verschillende functies die we kunnen gebruiken om waarden in een lijst in te voegen. Laten we dit demonstreren:
Voorbeeld 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';}}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Voeg het koptekstbestand van het algoritme toe om de functies ervan te gebruiken.
- Voeg het iostream-headerbestand toe om de functies ervan te gebruiken.
- Voeg het lijstkopbestand toe om de functies ervan te gebruiken.
- Roep de functie main () aan. De programmalogica moet worden toegevoegd in de body van deze functie.
- Maak een lijst met de naam my_list met een set van 4 gehele getallen.
- Voeg het element 11 in aan de voorkant van de lijst met de naam my_list.
- Voeg element 18 in aan het einde van de lijst met de naam my_list.
- Maak er een iterator aan en gebruik deze om het element 10 uit de lijst my_list te vinden.
- Gebruik een if-statement om te bepalen of het bovenstaande element is gevonden of niet.
- Voeg element 21 in voor het bovenstaande element als het werd gevonden.
- Einde van de body van de if-instructie.
- Gebruik een for-lus om een lusvariabele x te maken. Deze variabele wordt gebruikt om de lijstelementen te herhalen.
- Druk de waarden van de lijst op de console af.
- Einde van de body van de for a loop.
- Einde van de hoofdtekst van de functie main ().
Verwijderen uit een lijst
Het is mogelijk om items uit een lijst te verwijderen. Met de functie erase () kunt u een item of een reeks items uit een lijst verwijderen.
- Om een enkel item te verwijderen, geeft u simpelweg een geheel getal door. Het item wordt verwijderd.
- Om een bereik te verwijderen, passeert u de begin- en einditerators. Laten we dit demonstreren.
Voorbeeld 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;}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Voeg het koptekstbestand van het algoritme toe om de functies ervan te gebruiken.
- Voeg het iostream-headerbestand toe om de functies ervan te gebruiken.
- Voeg het lijstkopbestand toe om de functies ervan te gebruiken.
- Neem de std-naamruimte op in ons programma om zijn klassen te gebruiken zonder deze op te roepen.
- Roep de functie main () aan. De programmalogica moet worden toegevoegd in de body van deze functie.
- Maak een lijst met de naam my_list met een set van 4 gehele getallen.
- Druk wat tekst af op de console.
- Gebruik een for-lus om een lusvariabele x te maken. Deze variabele wordt gebruikt om de lijstelementen te herhalen.
- Druk de waarden van de lijst op de console af.
- Einde van de body van de for-lus.
- Maak een iterator i die naar het eerste element van de lijst verwijst.
- Gebruik de functie erase () die wordt aangegeven door de iterator i.
- Druk wat tekst af op de console.
- Gebruik een for-lus om een lusvariabele x te maken. Deze variabele wordt gebruikt om de lijstelementen te herhalen.
- Druk de waarden van de lijst op de console af. Dit komt na verwijdering.
- Einde van de body van de for-lus.
- Het programma moet een waarde retourneren bij succesvolle voltooiing.
- Einde van de hoofdtekst van de functie main ().
Overzicht:
- De std :: list is een opslagcontainer.
- Hiermee kunt u items overal en altijd invoegen en verwijderen.
- Het is geïmplementeerd als een dubbele link
- De std :: list-gegevens zijn bidirectioneel en sequentieel toegankelijk.
- std :: list ondersteunt geen snelle willekeurige toegang. Het ondersteunt echter sequentiële toegang vanuit alle richtingen.
- U kunt lijstelementen van std :: list in verschillende geheugenblokken verspreiden.
- U kunt std :: list vanaf beide uiteinden zo nodig tijdens runtime verkleinen of uitbreiden.
- Om items in std :: list in te voegen, gebruiken we de functie insert ().
- Om items uit de std :: lijst te verwijderen, gebruiken we de erase () functie.