Introduktion till Iterator i C ++

Att köra igenom dina mycket komplexa data som lagras i olika typer av behållare, t.ex. en array, vektor, etc. under den minsta exekveringstiden är möjlig på grund av Iterator i C ++, en komponent i Standard Template Library (STL). Oroa dig inte för att det bara är en pekare som ett objekt men det är smart eftersom det spelar ingen roll vilken behållare du använder, det kommer att göra din algoritm oberoende av behållartyp genom att tillhandahålla ett gemensamt gränssnitt för alla typer av containrar som en bro mellan algoritm och behållare. Iterator minskar inte bara komplexiteten i ett program utan gör körningstiden mycket snabbare.

Till exempel kommer sorteringsalgoritmen som har två parametrar som slutar och startar iteratorn att sortera i ordning oavsett vilken typ av behållare du använder. Iterator tillåter tillämpning av generiska algoritmer på datastrukturer. Datastrukturer kan använda en Iterator för att exponera en rad element.

Verksamhet med Iterator

  • börja (): Denna funktion returnerar en iterator som pekar på det första elementet i behållaren.
  • slut (): Denna funktion kommer att returnera en iterator som pekar till det sista elementet i behållaren.
  • förskott (): Denna funktion kommer att öka en iteratorposition till det angivna argumentet.
  • nästa (): Den här funktionen kommer att returnera den nya iteratorn som pekas av iteratorn efter ökningen av positionerna i argumenten.
  • föregående (): Denna funktion kommer att returnera den nya iteratorn som pekas av iteratorn efter dekrementering av positionerna i argumenten.
  • inserter (): Den här funktionen sätter in elementet i valfri position i behållaren.

Praktiskt genomförande

1. C ++ -kod för att implementera Iterator

Koda

#include
#include
#include
using namespace std;
int main()
(
//Declaring a Vector
std::vector v(1, 2, 3, 4, 5, 6, 7);
//Declaring Iterator
vector::iterator i;
//Function for iterating through vector elements
for(i=v.begin();i!=v.end();i++)
(
std::cout << *i <<" ";
)
return 0;
)

Produktion:

2. C ++ -kod för att visa iteratorfunktionalitet

Koda

#include
#include
#include
using namespace std;
int main()
(
//Declaring a Vector
vector v(1, 2, 3, 4, 5, 6, 7, 8);
//Declaring Iterator
vector::iterator i;
//Function
v.insert(v.begin()+1, 10);
for(i=v.begin();i!=v.end();i++) (
cout << *i <<" ";
)
return 0;
)

Produktion:

Iterator-kategorier

Från C ++ 17 finns det 5 olika typer av Iteratorer som kan klassificeras beroende på typen av funktionalitet som visas i flödesschemat nedan:

  • Input Iterator (stdin) : På grund av begränsad funktionalitet är de svagast av alla iteratorer med skrivskyddad och framåtriktad funktionalitet. Det kan inte ändra behållarens värde. Dereferenceoperatör (*), Inte lika operatör (! =), Inkrementoperatör (++) och Equal operator (==) kan användas som ingångs iteratorer. Också för sekventiella ingångsoperationer.
  • Output-Iterator (stdout): Iterator endast för att lagra, endast skriv-iterator som används för att ändra värdet på en behållare. De har också mycket begränsad funktionalitet. Iterator har inte åtkomst till elementet. Uppdragsoperatören (=) och inkrementoperatören (++) kan användas som utgångs iteratorer. Endast i en enda passalgoritm.
  • Framåt Iterator (enskilt länkad lista): Denna Iterator innehåller funktionaliteten för både Input och Output Iterators. Det kan gå framåt i riktning med ett steg i taget. För att läsa och skriva till en behållare är det den mest föredragna iteratorn som stöder återanvändning och sparande. Det stöder alla ovanstående operatörer.
  • Bidirectional Iterator (dubbel länkad lista): Som namnet redan antyder bi-riktning vilket gör det starkare än ovanstående iteratorer. Det stöder också läsning och skrivning till en behållare. Det stöder Decrement-operatören (-).
  • Random Access Iterator (arrays): Starkaste iterator är den mest kraftfulla iteratorn eftersom den kan läsa, skriva och ha tillgång till slumpmässigt. Pekare som funktionalitet som pekaren tillägg och subtraktion.

Fördelar med Iterator i C ++

Om du behöver flytta från ett element pekar iteratorn för närvarande till ett annat element som är potentiellt n steg bort från din nuvarande iterator. De första fyra i hierarkin tar en linjär tid att göra det medan en iterator med slumpmässig åtkomst kan göra det i konstant tid och det är väldigt mer fascinerande eftersom det är där tiden sparas. Det är den viktigaste funktionen som en Iterator tillhandahåller. Några fler nämns nedan

  • Kodeffektivitet: Om vi ​​har P-sorters behållare med data och Q-saker vi vill göra med dem, kommer vi i slutändan att skriva P * Q-algoritmer. Om uppgifterna också är av olika R-typer kan vi sluta med P * Q * R-algoritmen. Så genom att använda iteratorerna kan vi göra det i P + Q-algoritmen. Vi sparade 90% av tiden och arbetet. Tar effektiviteten i koden till nästa nivå. Konceptet bakom effektiviteten är att input iterator över källa och output iterator över målsekvensen inte behöver vara av samma typ.
  • Dynamisk bearbetning: Iteratorer har dynamiska funktioner som att byta i samma behållare, kopiera-tilldelningsbar, inkrementering, dereferencing och decrementing. Iteratorn tillhandahåller funktionen för att ta bort och dynamiskt lägga till element i behållaren. Eftersom alla iteratorer kan ökas, kan input-iteratorer jämföras och avskaffas till ett värde. Dubbelriktade iteratorer kan dekrementeras. Huvudaspekten är att skriva en funktion och använda den för valfri behållare.

Nackdelar med Iterator i C ++

  • Du kan inte flytta från en datastruktur till en annan samtidigt på något komplex sätt. Iterator fungerar inte i så fall.
  • Om du bearbetar genom en lista och du har glömt något och nu vill gå tillbaka kan du inte göra det eftersom iteratorer inte fungerar på det sättet.
  • Om du behöver uppdatera strukturen under korsning kan du inte göra det också på grund av iteratorens sätt att lagra sin position.

Slutsats

När du använder iteratorer måste du alltid ha dessa två saker i åtanke för att effektivisera koden. Passera alltid iteratorn till en funktion istället för behållare. Du bör aldrig returnera containrar istället för retur eller passera iterator. Du kan få valfritt element med en iterator, dereference och överföra ett par av iteratorn till en algoritm

Rekommenderade artiklar

Detta är en guide till Iterator i C ++. Här diskuterar vi operationer i iteratorn, kategorier, fördelar och nackdelar med koder och utgångar. Du kan också gå igenom våra andra relaterade artiklar för att lära dig mer-

  1. Matriser i C ++
  2. Vad är C ++
  3. C ++ Array-funktioner
  4. Loops i C ++
  5. PHP Array-funktioner | Typer av arrayfunktioner i PHP

Kategori: