iterators stl
Een compleet overzicht van iteratoren in STL.
In deze tutorial gaan we in op de details van iterators, hun typen, voordelen en de verschillende functies die ze ondersteunen.
wat zijn de fasen van de levenscyclus van softwareontwikkeling
Wat is een Iterator? Over het algemeen is een iterator net als elk object dat naar een bepaald element in een gegevensbereik verwijst, zoals een array of een container. Een iterator is net als een aanwijzer in C.
Zoek hier de volledige C ++-trainingsserie.
Wat je leert:
- Overzicht
- Soorten iteratoren
- Voordelen van iteratoren
- Iterator-functies
- Gevolgtrekking
- Aanbevolen literatuur
Overzicht
In STL is een iterator een object dat kan worden gebruikt om door de elementen in de container te lopen of er doorheen te stappen met behulp van een set operatoren zoals de increment-operator (++) of de dereference-operator (*).
Iteratoren zijn cruciaal bij STL-programmering, omdat ze een belangrijke rol spelen bij het verbinden van de algoritmen met de container, naast toegang tot en manipulatie van de gegevens die in de containers zijn opgeslagen.
Soorten iteratoren
Afhankelijk van de functionaliteit die door de iteratoren wordt geïmplementeerd, worden ze als volgt geclassificeerd:
- Input en output iteratoren : Dit zijn de meest vereenvoudigde typen iteratoren. Ze zijn het meest bruikbaar in opeenvolgende invoer-uitvoerbewerkingen met single-pass.
- Voorwaartse Iterators : Deze zijn net als invoer-iteratoren, maar hebben een richting, d.w.z. voorwaartse richting in de zin dat ze kunnen worden gebruikt om door een bereik in de voorwaartse richting te lopen. Als voorwaartse iteratoren niet constant zijn, kunnen ze ook worden gebruikt als uitvoer-iteratoren. De meeste standaard STL-containers ondersteunen in ieder geval forward iterators.
- Bidirectionele iteratoren : Deze zijn vergelijkbaar met doorstuur-iteratoren met het enige verschil dat ze bidirectioneel zijn. Dit betekent dat we deze bidirectionele iteratoren kunnen gebruiken om zowel in voorwaartse als achterwaartse richting door het bereik te lopen.
- Random Access Iterators : Random access iterators zijn het krachtigst van alle iterators. Dit zijn niet-sequentiële iteratoren. Random-access iterators stellen ons in staat om toegang te krijgen tot elke willekeurige waarde door een offset toe te passen op de huidige waarde zonder dat we elk element opeenvolgend hoeven te passeren. Ze vertonen vergelijkbare eigenschappen zoals Pointers in C.
Een ding om op te merken is dat niet alle STL-containers alle iterators ondersteunen. Verschillende containers ondersteunen verschillende iteratoren, afhankelijk van de vereisten van hun functionaliteit.
Hieronder staat de lijst met containers die verschillende iteratoren gebruiken:
Containers | Iteratoren |
---|---|
Kaart | Bidirectioneel |
Stapel | Geen iterator |
Wachtrij | Geen iterator |
Prioriteits-rij | Geen iterator |
Lijst | Bidirectioneel |
Vector | Willekeurige toegang |
en | Willekeurige toegang |
Multimap | Bidirectioneel |
Set | Bidirectioneel |
Multiset | Bidirectioneel |
Voordelen van iteratoren
Iterators zijn buitengewoon handig, vooral tijdens het programmeren met verschillende bereiken en containers.
Enkele van de voordelen van het gebruik van iteratoren bij het programmeren kunnen hieronder worden samengevat:
# 1) Herbruikbaarheid van code
Zolang we iterators gebruiken om toegang te krijgen tot elementen in ons programma, kunnen we gewoon de naam van de container in onze iteratordefinitie wijzigen en de rest van de code op dezelfde manier gebruiken wanneer we de container moeten wijzigen.
Dit is vooral handig in scenario's waarin we van plan zijn een vectorcontainer te vervangen door een lijstcontainer. Als we in plaats van iteratoren de operator () zouden gebruiken, zou de code om toegang te krijgen tot elementen nutteloos zijn als we de containers wijzigen.
# 2) Gemak en gemak van programmeren
Iterators worden geleverd met verschillende ingebouwde functies die ons helpen bij het gemakkelijk en gemakkelijk doorlopen en openen van de inhoud van de container.
Bijvoorbeeld , we hoeven niet steeds het einde van de lijst of array te controleren zoals we moeten doen bij het gebruik van () operators en we moeten de programmacode veranderen zoals wanneer we elementen willen toevoegen, en we moeten ze veranderen voor een lus .
Bij het gebruik van iterators hebben we direct toegang tot de begin () en end () functies van de iterators zonder dat we een tab aan hoeven te houden wanneer we het einde van de lijst bereiken en we hoeven ze ook niet te wijzigen voor een lus.
# 3) Dynamisch toevoegen / verwijderen
Tijdens het gebruik van iteratoren kunnen we eenvoudig en dynamisch de elementen in de container toevoegen of verwijderen zonder de elementen te hoeven verschuiven zoals we moeten doen in () operators.
Laten we dit demonstreren met het volgende voorbeeld:
Uitgang:
Vectorinhoud na toevoeging
3 1 1 2
Vectorinhoud na verwijdering
3 1 2
Zoals te zien is in het bovenstaande voorbeeld, zien we dat we met iteratoren gemakkelijk elementen kunnen toevoegen aan of verwijderen uit een container (in dit geval vector), zonder toevlucht te hoeven nemen tot de complexe programmering van verschuivende elementen en het herstructureren van de container.
Iterator-functies
Omdat iterators zelf ingebouwde constructies zijn, ondersteunen ze verschillende bewerkingen die kunnen worden uitgevoerd op iteratorobjecten. Deze bewerkingen / functies stellen ons in staat om efficiënt door het bereik te reizen en ook de elementen in de container te manipuleren.
Nu zullen we enkele belangrijke bewerkingen zien die iteratoren ondersteunen.
- beginnen: Retourneert de eerste of beginpositie van de iterator.
- einde: Retourneert de laatste positie of ‘na het einde’ -positie van de iterator.
- vorige: Retourneert de nieuwe iterator na afname van het aantal posities dat in het argument is opgegeven.
- De volgende: Retourneert een nieuwe iterator nadat het aantal posities dat in het argument is opgegeven, is verhoogd of verhoogd.
- inserter: Voegt element in op een willekeurige positie in een container.
- vooruitgaan: Verhoogt de iteratorpositie naar het opgegeven getal dat in het argument is opgegeven.
We zullen het gebruik van een deel van deze functie / bewerking in het volgende programma demonstreren:
Uitgang:
Met behulp van next () is de nieuwe iterator op: 2
De positie van een nieuwe iterator die prev () gebruikt, is: 3
Na de vervroeging wordt itr1 gepositioneerd op: 3
Met behulp van het bovenstaande programma hebben we het gebruik van verschillende iteratorbewerkingen gedemonstreerd.
Gevolgtrekking
Zo zijn we aan het einde gekomen van deze tutorial over Iterators.
Tot dusver hebben we de basisprincipes van STL besproken, vanaf onze volgende tutorial zullen we beginnen met STL-containers en hun programmering.
Bekijk hier de complete C ++ GRATIS trainingsreeks.