iterators stl
Una visió general completa dels iteradors a STL.
En aquest tutorial, examinarem els detalls dels iteradors, els seus tipus, avantatges i les diverses funcions que admeten.
com fer flash a Windows 10 de bios
Què és un iterador? En general, un iterador és com qualsevol objecte que apunta a un element concret en un interval de dades, com ara una matriu o un contenidor. Un iterador és com un punter en C.
=> Cerqueu aquí tota la sèrie de formació C ++.
Què aprendreu:
- Visió general
- Tipus d'iteradors
- Avantatges dels iteradors
- Funcions iteradores
- Conclusió
- Lectura recomanada
Visió general
A STL, un iterador és un objecte que es pot utilitzar per recórrer o recórrer els elements del contenidor mitjançant un conjunt d'operadors com l'operador d'increment (++) o l'operador de desreferència (*).
Els iteradors són crucials en la programació STL, ja que tenen un paper important en la connexió dels algoritmes al contenidor, a més d’accedir i manipular les dades emmagatzemades dins dels contenidors.
Tipus d'iteradors
En funció de la funcionalitat implementada pels iteradors, es classifiquen de la següent manera:
- Iteradors d'entrada i sortida : Aquests són els tipus d'iteradors més simplificats. Són molt útils en operacions seqüencials d’entrada-sortida que contenen un pas únic.
- Iteradors endavant : Són com els iteradors d’entrada, però tenen una direcció, és a dir, direcció cap endavant en el sentit que es poden utilitzar per recórrer un rang en la direcció d’enviament. Quan els iteradors directes no són constants, també es poden utilitzar com a iteradors de sortida. La majoria de contenidors STL estàndard, com a mínim, admeten iteradors directes.
- Iteradors bidireccionals : Són similars als iteradors de reenviament, amb l'única diferència que són bidireccionals. Això vol dir que podem utilitzar aquests iteradors bidireccionals per recórrer el rang tant cap a endavant com cap enrere.
- Iteradors d'accés aleatori : Els iteradors d'accés aleatori són els més potents entre tots els iteradors. Es tracta d’iteradors no seqüencials. Els iteradors d’accés aleatori ens permeten accedir a qualsevol valor aleatori aplicant un desplaçament al valor actual sense haver de passar per cada element seqüencialment. Presenten propietats similars a les de punteros en C.
Una cosa a tenir en compte és que no tots els contenidors STL admeten tots els iteradors. Els diferents contenidors admeten diferents iteradors en funció del requisit de la seva funcionalitat.
A continuació es mostra la llista de contenidors que utilitzen diferents iteradors:
Contenidors | Iteradors |
---|---|
Mapa | Bidireccional |
Pila | Cap iterador |
Cua | Cap iterador |
Cua de prioritat | Cap iterador |
Llista | Bidireccional |
Vector | Accés aleatori |
i | Accés aleatori |
Multimapa | Bidireccional |
Conjunt | Bidireccional |
Multiset | Bidireccional |
Avantatges dels iteradors
Els iteradors són extremadament útils sobretot durant la programació amb diferents rangs i contenidors.
Alguns dels avantatges d'utilitzar iteradors en la programació es poden resumir a continuació:
# 1) Reutilització del codi
Mentre utilitzem iteradors per accedir als elements del nostre programa, només podem canviar el nom del contenidor a la definició de l’iterador i utilitzar la resta del codi d’una manera similar sempre que hàgim de canviar el contenidor.
Això és especialment útil en els escenaris en què pensem substituir un contenidor vectorial mitjançant un contenidor de llista. Si en lloc dels iteradors féssim servir l'operador (), el codi per accedir als elements seria inútil quan canviem els contenidors.
# 2) Facilitat i comoditat de programació
Els iteradors inclouen diverses funcions integrades que ens ajuden a recórrer i accedir al contingut del contenidor fàcilment i còmodament.
Per exemple , no hem de continuar comprovant el final de la llista o matriu que hem de fer mentre fem servir operadors () i hem d'alterar el codi del programa com quan volem afegir elements, i els hem de canviar per un bucle .
Quan fem servir iteradors podem accedir directament a les funcions begin () i end () dels iteradors sense haver de mantenir una pestanya quan arribem al final de la llista i tampoc no els hem de canviar per un bucle.
# 3) Afegeix / suprimeix dinàmic
Mentre fem servir iteradors, podem afegir o eliminar fàcilment i dinàmicament els elements del contenidor sense haver de canviar els elements tal com hem de fer en els operadors ().
Demostrem-ho amb l'exemple següent:
#include #include using namespace std; int main() { vector vec1 = { 1, 1, 2 }; // Declaring an iterator vector::iterator i; // Inserting element for (i = vec1.begin(); i != vec1.end(); ++i) { if (i == vec1.begin()) { i = vec1.insert(i, 3); // insert 3 at the beginning of vec1 } } // contents of vec1 3 1 1 2 cout<<'Vector contents after addition'; cout< Sortida:
Contingut vectorial després de l’addició
3 1 1 2
Contingut vectorial després de la supressió
3 1 2
Com es veu a l’exemple anterior, veiem que mitjançant iteradors podem afegir o eliminar fàcilment elements d’un contenidor (vector en aquest cas), sense haver de recórrer a la complexa programació d’elements desplaçables i reestructurar el contenidor.
Funcions iteradores
Com que els mateixos iteradors són construccions integrades, admeten diverses operacions que es poden fer en objectes d'iterador. Aquestes operacions / funcions ens permeten recórrer el rang de manera eficient i també manipular els elements dins del contenidor.
Ara veurem algunes operacions importants que admeten els iteradors.
- comença: Retorna la primera o la posició inicial de l'iterador.
- final: Retorna l'última posició o la posició 'després del final' de l'iterador.
- prev: Retorna el nou iterador després de disminuir el nombre de posicions donades a l'argument.
- Pròxim: Retorna el nou iterador després d'avançar o incrementar el nombre de posicions donades a l'argument.
- inseridor: Insereix element en una posició determinada en un contenidor.
- avançar: Incrementa la posició de l'iterador al nombre especificat indicat a l'argument.
Demostrarem l’ús d’algunes d’aquestes funcions / operacions al programa següent:
#include #include #include using namespace std; int main() { vector v = { 1, 1,2,3,5 }; // declaring iterators to a vector vector::iterator itr1 = v.begin(); vector::iterator itr2 = v.end(); auto it = next(itr1, 2); // displaying iterator position cout << 'Using next() the new iterator is at: '; cout << *it << ' '; cout << endl; auto it1 = prev(itr2, 2); // displaying iterator position cout << 'The position of new iterator using prev() is: '; cout << *it1 << ' '; cout << endl; //advance advance(itr1,3); // displaying iterator position cout << 'After advance operation,itr1 is positioned at: '; cout << *itr1 << ' '; cout << endl; return 0; }
Sortida:
Utilitzant next () el nou iterador es troba a: 2
La posició del nou iterador que utilitza prev () és: 3
Després de l'operació avançada, itr1 se situa a: 3
Mitjançant el programa anterior hem demostrat l’ús de diverses operacions iteradores.
Conclusió
Així hem arribat al final d’aquest tutorial sobre els iteradors.
Fins ara hem comentat els conceptes bàsics de STL, a partir del nostre proper tutorial començarem amb els contenidors STL i la seva programació.
=> Consulteu aquí la sèrie completa de formació GRATU CompleteTA C ++.
Lectura recomanada
- Cua de prioritat a STL
- Matrius a STL
- 70+ BEST Tutorials C ++ per aprendre programació C ++ GRATIS
- Cordes, parells i tuples a STL
- CONJUNT A STL
- Algorismes a STL
- Millor sèrie de tutorials C # GRATU :TS: la millor guia C # per a principiants
- Biblioteca de plantilles estàndard (STL): una breu introducció