lists stl
Conegueu tot sobre les llistes de STL juntament amb la seva implementació.
Les llistes són contenidors seqüencials. Les llistes contenen elements en ubicacions no contigües. Hem comentat matrius i vectors en els nostres tutorials anteriors.
En el cas dels contenidors de matriu i vector, ja que aquests contenidors emmagatzemen dades en memòria contigua, l'operació d'inserció al centre d'aquests contenidors resulta molt costosa ja que hem de canviar els elements existents en conseqüència per fer espai per al nou element.
=> Vegeu aquí per explorar la llista completa de tutorials de C ++.
vídeos per veure amb auriculars vr
Què aprendreu:
Visió general
La llista és un contenidor que supera aquest inconvenient dels contenidors de matriu i vector. Ens permet inserir elements a qualsevol lloc de la llista sense provocar una despesa general. Però les llistes són més lentes que els vectors pel que fa a la travessia.
En aquest tutorial, veurem la implementació de llistes a STL juntament amb les diverses operacions de recorregut, manipulacions i llista d'accés amb exemples.
Tingueu en compte que la majoria de les operacions de llista són similars a les dels vectors i, per tant, els lectors que ja han llegit el nostre tutorial sobre vectors no tindran problemes per interpretar els conceptes de llista.
Declaració i inicialització
Per implementar el contenidor de llistes i utilitzar tots els seus avantatges, hem d’incloure un fitxer de capçalera al nostre programa.
#include
La declaració general del contenidor de llista és
std::list listName;
Per exemple,podem declarar una llista anomenada 'la meva llista' de tipus int de la següent manera:
std::list mylist;
També podem inicialitzar la llista en el moment de la declaració o afegir-hi elements mitjançant una de les operacions que admet.
Vegem com podem inicialitzar la llista que hem creat anteriorment.
std::list mylist = {1, 1, 2, 3, 5};
La inicialització anterior es mostrarà a la memòria, tal com es mostra a continuació:
Un cop inicialitzem la llista, podem accedir als elements d’una llista mitjançant un iterador. Les funcions Iterator 'començar' i 'finalitzar' ens ajuden a recórrer els elements de la llista.
Nota: L'iterador de la llista també admet altres iteradors com els iteradors inversos (rbegin, rend), els iteradors constants (cbegin, cend) i els iteradors inversos constants (crbegin, crend) i es poden utilitzar de manera similar als vectors.
L'exemple següent ho mostra.
#include #include #include #include using namespace std; int main() { list mylist = {1, 1, 2, 3, 5}; cout<<”List elements are: “; list::iterator it; for(it=mylist.begin();it!=mylist.end();++it) cout<<*it<<” “; }
Sortida:
Els elements de la llista són: 1 1 2 3 5
Així, a l'exemple anterior, hem declarat una llista de la seqüència de Fibonacci. A continuació, declarem un iterador del mateix tipus que la llista i, a continuació, utilitzant el bucle for, imprimim el contingut de la llista de principi a fi.
Ara anem a les operacions o funcions que ens proporciona el contenidor de la llista a STL.
Llista Operacions
- Insereix: S'utilitza per inserir un element a la posició donada. Retorna un iterador que apunta al primer element inserit.
inserir (pos, num_elem, elem)
On,
pos => Posició en què s'han d'inserir els nous elements.
num_elem => Nombre d'elements a inserir; per defecte a 1.
ítem => Valor real que cal inserir.
Anem a entendre la funció d'inserció prenent un exemple.
#include #include // for list operations using namespace std; int main() { list mylist = {1,1,2}; list::iterator it = mylist.begin(); // iterator to point to 4th position advance(it,` 3); // inserts 3 at 4th position mylist.insert(it, 3); cout << 'The list after inserting' << ' 1 element using insert() is : '; for (list::iterator i = mylist.begin();i != mylist.end();i++) cout << *i << ' '; cout << endl; }
Sortida:
La llista després d’inserir 1 element mitjançant insert () és: 1 1 2 3
Aquest és un exemple per inserir només un element al 4thposició a la llista que és finalment la darrera posició. Per tant, primer tenim una llista per a la qual hem definit l’iterador que apunta al principi de la llista. A continuació, passem aquest iterador al 4thposició i després truqueu insert per inserir 1 element.
També podem inserir més d’un element especificant el segon paràmetre a la funció d’inserció. Sempre que no s’especifica, per defecte és 1.
- fer retrocedir :Afegeix un element nou al final de la llista.
- push_front :Afegeix un element nou al començament de la llista.
Vegem un exemple que demostra l’ús de les funcions push_back i push_front.
#include #include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3}; cout<<'List elements are: '; printlist(mylist); mylist.push_front(0); mylist.push_back(5); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }
Sortida:
Els elements de la llista són: 1 1 2 3
Mostra el contingut després de push_front i push_back: 0 1 1 2 3 5
En aquest exemple, primer en creem i enumerem els dos elements, un a la part frontal i posterior mitjançant les funcions push_front i push_back respectivament. La sortida mostra la llista de canvis després d'executar les dues funcions.
- pop_back :Elimina l'últim element de la llista, reduint així la mida de la llista en 1.
- pop_front :Elimina el primer element de la llista, reduint així la mida de la llista en 1.
L'exemple següent mostra l'ús de les operacions pop_back i pop_front de la llista.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); mylist.pop_front(); mylist.pop_back(); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }
Sortida:
Els elements de la llista són: 1 1 2 3 5
Mostra el contingut després de push_front i push_back: 1 2 3
Com es descriu a la definició de les operacions, cadascuna de les operacions pop_front i pop_back elimina l'element de la part frontal i posterior de la llista, és a dir, el primer i l'últim element de la llista respectivament i, per tant, cada vegada que redueix la mida de la llista en 1.
- mida :Retorna la mida de la llista, és a dir, el nombre d'elements de la llista.
- buit :Comprova si la llista està buida.
- esborrar :Elimina un element o un rang d'elements de la llista.
- clar :Elimina tots els elements de la llista amb una mida 0.
A continuació es mostra un exemple per demostrar l’ús de totes les funcions anteriors, és a dir, mida, buit, esborrat i esborrat.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'size of the list: '< Sortida:
Els elements de la llista són: 1 1 2 3 5
mida de la llista: 5
Llista després d’esborrar el primer element: 1 2 3 5
Nova mida de la llista: 4
mida de la llista després d'esborrar: 0
El programa anterior mostra les quatre funcions relacionades amb la capacitat de la llista. Veiem que la mida de la llista disminueix 1 quan esborrem 1 element de la llista. Mentre que quan anomenem una operació clara a la llista, la mida és 0, cosa que significa que s’eliminen tots els elements de la llista.
- frontal :Retorna el valor del primer element de la llista.
- esquena :Retorna el valor de l'últim element de la llista.
- intercanviar :Intercanvia el contingut d'una llista amb el contingut d'una altra llista de la mateixa mida i tipus.
- al revés :Un algorisme que inverteix la llista.
- ordenar :Ordena la llista donada.
L'exemple següent mostra l'ús de les funcions frontal, posterior, inversa, ordenació i permuta.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'
Front of the list: '< Sortida:
Els elements de la llista són: 1 1 2 3 5
Davant de la llista: 1
Darrere de la llista: 5
Llista invertida: 5 3 2 1 1
Contingut de la llista senar: 1 3 5 7 9
Després d’intercanviar
la meva llista: 1 3 5 7 9
Llista senar: 5 3 2 1 1
En aquest codi, primer, imprimim els valors frontal i posterior de la llista mylist. A continuació, aquesta llista s'inverteix i s'imprimeix la llista invertida. Després d’això, definim una llista més de nombres senars que no es troba en cap ordre i anomenem l’algorisme ‘Ordena’ per ordenar aquesta llista. A continuació, intercanviem les dues llistes mitjançant la funció d'intercanvi i imprimim les llistes intercanviades.
- empalme :Aquesta funció s'utilitza per transferir el contingut d'una llista a una altra llista en una posició especificada.
Les dues llistes han de ser del mateix tipus.
empalme (posició, llista);
on,
position => Posició a la qual es vol transferir el contingut de la llista.
llista => Llista dels elements que es volen transferir.
L'exemple que es mostra a continuació mostra l'ús de la funció d'empalme.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 8,13}; cout<<'List elements are: '; printlist(mylist); list seclist = {2,3,5}; cout<<'list to be spliced: '; printlist(seclist); list:: iterator it = mylist.begin(); it ++; it++; mylist.splice(it,seclist); cout<<'
List contents after splicing at position 2: '; printlist(mylist); }
Sortida:
Els elements de la llista són: 1 1 8 13
llista per empalmar: 2 3 5
Enumereu el contingut després d’empalmar a la posició 2: 1 1 2 3 5 8 13
El exemple mostra que fem servir dues llistes. Primer, l’iterador de la meva llista es mou a dues posicions i després es crida a la funció d’empalme per transferir el contingut de la segona llista a la tercera posició de la primera llista.
- vaja :A diferència de la funció empalme que es pot utilitzar per transferir contingut d'una llista a una altra en una posició específica, l'operació de combinació combina directament dues llistes per formar una llista única. Per a l'operació de combinació, les dues llistes han d'estar ordenades.
A continuació es mostra un exemple per demostrar la funció de combinació.
preguntes i respostes de l'entrevista angular js
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1,2,3,5,8}; list seclist = {4,6,7}; cout<<'First List: '; printlist(mylist); cout< Sortida:
Primera llista: 11 2 3 5 8
Segona llista: 4 6 7
Mostra el contingut després de combinar dues llistes:
1 1 2 3 4 5 6 7 8
Així, al programa anterior, tenim dues llistes ordenades. Anomenem operació de combinació en aquestes dues llistes. La llista resultant és una llista ordenada que conté els elements de les dues llistes.
Conclusió
Hem arribat al final d’aquest tutorial sobre llistes a STL. Esperem que aquest tutorial us hagi proporcionat un coneixement immens sobre les llistes a STL.
=> Consulteu aquí per veure aquí els tutorials de formació A-Z de C ++.
Lectura recomanada