Ce este o listă std ::?
În C ++, lista std :: se referă la un container de stocare. Lista std: vă permite să inserați și să eliminați elemente de oriunde. Lista std :: este implementată ca o listă dublă legată. Aceasta înseamnă că datele din listă pot fi accesate bidirecțional și secvențial.
Lista Standard Template Library nu acceptă accesul rapid aleatoriu, dar acceptă accesul secvențial din toate direcțiile.
Puteți împrăștia elemente de listă în diferite bucăți de memorie. Informațiile necesare pentru accesul secvențial la date sunt stocate într-un container. Lista std :: se poate extinde și micșora de la ambele capete, după cum este necesar în timpul rulării. Un alocator intern îndeplinește automat cerințele de stocare.
În acest tutorial C ++, veți învăța:
- Ce este o listă std ::?
- De ce să folosiți std :: list?
- Sintaxă listă
- Funcții de listă C ++
-
- Constructori
- Proprietățile containerului
- Inserarea într-o listă
- Ștergerea dintr-o listă
De ce să folosiți std :: list?
Iată motivul utilizării std :: List:
- Lista std :: se compară mai bine cu alte containere de secvență, cum ar fi matrice și vector.
- Au o performanță mai bună în inserarea, mișcarea și extragerea elementelor din orice poziție.
- Lista std :: se descurcă mai bine și cu algoritmi care efectuează astfel de operații intens.
Sintaxă listă
Pentru a defini lista std ::, trebuie să importăm fișierul antet
. Iată sintaxa definiției std :: list:
template < class Type, class Alloc =allocator> class list;
Iată o descriere a parametrilor de mai sus:
- T - Definește tipul de element conținut.
Puteți înlocui T cu orice tip de date, chiar și tipuri definite de utilizator.
- Alocare - Definește tipul obiectului alocator.
Aceasta folosește șablonul de clasă alocator în mod implicit. Depinde de valoare și folosește un model simplu de alocare a memoriei.
Exemple 1:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}
Ieșire:
Iată o captură de ecran a codului:
Explicatie cod:
- Includeți fișierul antet algoritm pentru a-i folosi funcțiile.
- Includeți fișierul antet iostream pentru a-i folosi funcțiile.
- Includeți fișierul antet listă pentru a-i folosi funcțiile.
- Apelați funcția main (). Logica programului trebuie adăugată în corpul acestei funcții.
- Creați o listă numită lista_meu cu un set de 4 numere întregi.
- Utilizați o buclă for pentru a crea o variabilă de buclă x. Această variabilă va fi utilizată pentru a itera peste elementele listei.
- Imprimați valorile listei de pe consolă.
- Sfârșitul corpului pentru o buclă.
- Sfârșitul corpului funcției main ().
Funcții de listă C ++
Iată funcțiile comune std :: list:
Funcţie | Descriere |
introduce() | Această funcție introduce un element nou înainte de poziția pe care iteratorul o indică. |
împinge înapoi() | Aceste funcții adaugă un element nou la sfârșitul listei. |
push_front () | Se adaugă un element nou în partea din față a listei. |
pop_front () | Șterge primul articol al listei. |
mărimea() | Această funcție determină numărul de elemente ale listei. |
față() | Pentru a determina primele elemente ale listei. |
înapoi() | To determină ultimul element al listei. |
verso() | Se inversează elementele listei. |
combina() | Fuzionează două liste sortate. |
Constructori
Iată lista funcțiilor oferite de fișierul antet
:
- Constructor implicit std :: list :: list () - Creează o listă goală, care, cu zero elemente.
- Fill constructor std :: list :: list () - Creează o listă cu n elemente și atribuie o valoare zero (0) fiecărui element.
- Constructorul intervalului std :: list :: list () - creează o listă cu multe elemente în intervalul de la primul până la ultimul.
- Copy constructor std :: list :: list () - Creează o listă cu o copie a fiecărui element conținut în lista existentă.
- Move constructor std :: list :: list () - creează o listă cu elementele unei alte liste utilizând semantica move.
- Initializer list constructor std :: list :: list () - Creează o listă cu elementele unei alte liste utilizând semantica de mutare.
Exemplul 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;}
Ieșire:
Iată o captură de ecran a codului:
Explicatie cod:
- Includeți fișierul antet iostream pentru a-i folosi funcțiile.
- Includeți fișierul antet listă pentru a-i folosi funcțiile.
- Includeți spațiul de nume std în cod pentru a utiliza clasele sale fără a-l apela.
- Apelați funcția main (). Logica programului trebuie adăugată în corpul acestei funcții.
- Creați o listă goală numită l.
- Creați o listă numită l1 cu un set de 3 numere întregi.
- Creați o listă numită l2 cu toate elementele din lista numită l1, de la început până la sfârșit.
- Creați o listă numită l3 utilizând semantica de mutare. Lista l3 va avea același conținut ca lista l2.
- Imprimați dimensiunea listei numite l pe consolă alături de alt text.
- Imprimați un text pe consolă.
- Creați un iterator numit și folosiți-l pentru a itera peste elementele listei numite l2.
- Imprimați elementele listei numite l2 pe consolă.
- Imprimați un text pe consolă.
- Creați un iterator numit și folosiți-l pentru a itera peste elementele listei numite l3.
- Imprimați elementele listei numite l3 pe consolă.
- Programul trebuie să returneze valoarea la finalizarea cu succes.
- Sfârșitul corpului funcției main ().
Proprietățile containerului
Iată lista proprietăților containerului:
Proprietate | Descriere |
Secvenţă | Containerele de secvențe își ordonează elementele într-o ordine liniară strictă. Elementele sunt accesate prin poziția lor în secvență. |
Listă legată dublu | Fiecare element are informații despre cum să localizați elementele anterioare și următoare. Acest lucru permite un timp constant pentru operațiile de inserare și ștergere. |
Conștient de alocator | Un obiect alocator este utilizat pentru modificarea dinamică a dimensiunii stocării. |
Inserarea într-o listă
Există diferite funcții pe care le putem folosi pentru a insera valori într-o listă. Să demonstrăm acest lucru:
Exemplul 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';}}
Ieșire:
Iată o captură de ecran a codului:
Explicatie cod:
- Includeți fișierul antet algoritm pentru a-i folosi funcțiile.
- Includeți fișierul antet iostream pentru a-i folosi funcțiile.
- Includeți fișierul antet listă pentru a-i folosi funcțiile.
- Apelați funcția main (). Logica programului trebuie adăugată în corpul acestei funcții.
- Creați o listă numită lista_meu cu un set de 4 numere întregi.
- Introduceți elementul 11 în partea din față a listei numită lista_meu.
- Introduceți elementul 18 la sfârșitul listei numite lista_meu.
- Creați un iterator și folosiți-l pentru a găsi elementul 10 din lista my_list.
- Utilizați o instrucțiune if pentru a determina dacă elementul de mai sus a fost găsit sau nu.
- Introduceți elementul 21 înainte de elementul de mai sus dacă a fost găsit.
- Sfârșitul corpului afirmației if.
- Utilizați o buclă for pentru a crea o variabilă de buclă x. Această variabilă va fi utilizată pentru a itera peste elementele listei.
- Imprimați valorile listei de pe consolă.
- Sfârșitul corpului pentru o buclă.
- Sfârșitul corpului funcției main ().
Ștergerea dintr-o listă
Este posibil să ștergeți elemente dintr-o listă. Funcția șterge () vă permite să ștergeți un articol sau o serie de articole dintr-o listă.
- Pentru a șterge un singur element, pur și simplu treceți o poziție întreagă. Elementul va fi șters.
- Pentru a șterge un interval, treceți iteratorii de început și de sfârșit. Să demonstrăm acest lucru.
Exemplul 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;}
Ieșire:
Iată captura de ecran a codului:
Explicatie cod:
- Includeți fișierul antet algoritm pentru a-i folosi funcțiile.
- Includeți fișierul antet iostream pentru a-i folosi funcțiile.
- Includeți fișierul antet listă pentru a-i folosi funcțiile.
- Includeți spațiul de nume std în programul nostru pentru a utiliza clasele sale fără a-l apela.
- Apelați funcția main (). Logica programului trebuie adăugată în corpul acestei funcții.
- Creați o listă numită lista_meu cu un set de 4 numere întregi.
- Imprimați un text pe consolă.
- Utilizați o buclă for pentru a crea o variabilă de buclă x. Această variabilă va fi utilizată pentru a itera peste elementele listei.
- Imprimați valorile listei de pe consolă.
- Sfârșitul corpului buclei for.
- Creați un iterator i care indică primul element al listei.
- Utilizați funcția erase () indicată de iterator i.
- Imprimați un text pe consolă.
- Utilizați o buclă for pentru a crea o variabilă de buclă x. Această variabilă va fi utilizată pentru a itera peste elementele listei.
- Imprimați valorile listei de pe consolă. Acest lucru vine după ștergere.
- Sfârșitul corpului buclei for.
- Programul trebuie să returneze o valoare după finalizarea cu succes.
- Sfârșitul corpului funcției main ().
Rezumat:
- Lista std :: este un container de stocare.
- Permite inserarea și ștergerea articolelor de oriunde în timp constant.
- Este implementat ca o legătură dublă
- Datele std :: list pot fi accesate bidirecțional și secvențial.
- std :: list nu acceptă accesul rapid aleatoriu. Cu toate acestea, acceptă acces secvențial din toate direcțiile.
- Puteți împrăștia elementele listei std :: list în diferite bucăți de memorie.
- Puteți micșora sau extinde std :: list de la ambele capete, după cum este necesar în timpul rulării.
- Pentru a insera elemente în lista std ::, folosim funcția insert ().
- Pentru a șterge articole din lista std ::, folosim funcția erase ().