Bevezetés az Iteratorhoz a C ++ nyelven

A különféle típusú tárolókban, például egy tömbben, vektorban stb. Tárolt rendkívül összetett adatok átvitele a legkisebb végrehajtási idővel a C ++ Iteratorjának köszönhető, amely a Standard Template Library (STL) egyik alkotóeleme. Ne aggódjon, ez csak egy mutató, mint egy objektum, de okos, mivel nem számít, hogy milyen tárolót használ, az algoritmust függetlenné teszi a tároló típusától, mivel közös felületet biztosít minden típusú tárolóhoz, például egy híd között algoritmus és tároló. Az Iterator nem csak csökkenti a program összetettségét, hanem sokkal gyorsabbá teszi a végrehajtási időt.

Például, a sort () algoritmus, amelynek két paramétere van, az iterator befejezése és indítása elvégzi a rendezést, függetlenül attól, hogy milyen típusú tárolót használ. Az Iterator lehetővé teszi az általános algoritmusok alkalmazását az adatszerkezetekre. Az adatszerkezetek felhasználhatják az Iterator eszközt az elemek széles skálájának feltárására.

Műveletek az Iterator segítségével

  • start (): Ez a funkció visszatér egy iterátort, amely a tároló első elemére mutat.
  • end (): Ez a funkció visszatér egy iterátort, amely a tároló utolsó elemének múltjára mutat.
  • előre (): Ez a funkció növeli az iterátor pozícióját a megadott argumentumhoz.
  • következő (): Ez a függvény visszaadja az új iterátort, amelyet az iterátor mutat az argumentumok pozícióinak növelése után.
  • Előző (): Ez a függvény visszaadja az új iterátort, amelyet az iterátor mutat az argumentumok pozícióinak csökkentése után.
  • inserter (): Ez a funkció az elemet a tartály bármely helyzetébe beillesztheti.

Gyakorlati megvalósítás

1. C ++ kód az Iterator megvalósításához

Kód

#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;
)

Kimenet:

2. C ++ kód az iterator funkció megjelenítéséhez

Kód

#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;
)

Kimenet:

Iterator kategóriák

A C ++ 17 óta öt különféle típusú iterator létezik, amelyeket a funkcionalitás típusától függően lehet besorolni, az alábbi folyamatábra szerint:

  • Bemeneti idéző ​​(stdin) : A korlátozott funkcionalitás miatt a leggyengébb iterátorok közül, csak olvasható és előre mozgatható funkciókkal rendelkeznek. Nem tudja módosítani a tároló értékét. Beviteli iterátorként deferencia operátor (*), nem egyenlő operátor (! =), Növekményes operátor (++) és egyenlő operátor (==) használható. Szekvenciális beviteli műveletekhez is.
  • Output Iterator (stdout): Iterator csak írásos iterator tárolására, amelyet egy tároló értékének módosítására használnak. Nagyon korlátozott funkcionalitással is rendelkeznek. Az idéző ​​nem fér hozzá az elemhez. A kiosztási operátor (=) és az Növelés operátor (++) használható kimeneti iterátorokként. Csak egymenetes algoritmusban.
  • Forward Iterator (egyedileg összekapcsolt lista): Ez az Iterator mind a bemeneti, mind a kimeneti idézők funkcióit tartalmazza. Egy lépéssel előre léphet előre. A tárolóba való olvasáshoz és az íráshoz a legelőnyösebb iterator támogatja az újrafelhasználást és a mentést. Támogatja a fenti operátorokat.
  • Kétirányú idéző ​​(kétszeresen összekapcsolt lista): Mivel a név már kétirányú, ami a fenti iterátorokkal erősebbé teszi. Támogatja a tárolóba való olvasást és írást is. Támogatja a Decrement operátort (-).
  • Random Access Iterator (tömbök): A legerősebb iterátor a legerősebb iterator, mivel képes olvasni, írni és véletlenszerűen hozzáférni. A mutató szereti a funkcionalitást, például a mutató összeadását és kivonását.

Az Iterator előnyei a C ++-ban

Ha el kell mozdulnia az egyik elemtől, akkor az iterátor egy másik elemre mutat, amely potenciálisan n lépésnyire van az aktuális iteratorától. A hierarchiában az első négy egyenes időigényes időt vesz igénybe ennek elvégzéséhez, míg a véletlen hozzáférésű iterátor ezt megteheti állandó időben, és ez még izgalmasabb, mert itt az idő takarítható meg. Ez a legfontosabb szolgáltatás, amelyet az Iterator nyújt. Még néhányat említenek alább

  • Kódhatékonyság: Ha van P típusú adattároló és Q-dolog, amit velük szeretnénk csinálni, akkor a P * Q algoritmusokat fogjuk írni. Ha az adatok szintén R típusúak, akkor a P * Q * R algoritmust adhatjuk meg. Tehát az iterátorok segítségével megtehetjük a P + Q algoritmusban. Az idő és a munka 90% -át megtakarítottuk. A kód hatékonyságának átvitele a következő szintre. A hatékonyság mögött rejlik az, hogy a bemeneti iterátornak a forrás feletti és a kimeneti iteratornak a célszekvencián nem kell azonos típusúnak lennie.
  • Dinamikus feldolgozás: Az Iteratorok olyan dinamikus funkciókkal rendelkeznek, mint például a csere ugyanabban a tárolóban, másoláshoz hozzárendelhető, növekvő, hivatkozások megszüntetése és csökkentése. Az iterátor lehetővé teszi az elemek eltávolítását és dinamikus hozzáadását a tárolóhoz. Mivel az összes iterátort növelni lehet, a bemeneti iterátorok összehasonlíthatók, és egy értékre való hivatkozás visszavonható. A kétirányú iterátorok csökkenthetők. A fő szempont az, hogy írjunk egy funkciót, és felhasználjuk bármilyen tárolóhoz.

Az Iterator hátrányai a C ++-ban

  • Ugyanakkor összetett módon nem mozgathat az egyik adatstruktúráról a másikra. Az Iterator ebben az esetben nem fog működni.
  • Ha egy listán dolgozik, és elfelejtett valamit, és most vissza akarsz térni, akkor nem tudsz, mert az iteratorok nem fognak így működni.
  • Abban az esetben, ha frissíteni kell a struktúrát az áthaladás során, ezt nem is teheti meg, mert a pozícióját iterátor módon tárolja.

Következtetés

Az iteratorok használata közben mindig tartsa szem előtt ezt a két dolgot a kód hatékonysága érdekében. Az iterátort mindig konténer helyett adja át egy függvénynek. Soha nem szabad visszaküldeni a konténereket az visszatérés vagy az iterator átadása helyett. Bármely elemet kaphat iterátorral, dereferenciával és egy iterátorpár átadásával egy algoritmussal

Ajánlott cikkek

Ez egy útmutató az Iteratorhoz a C ++ nyelven. Itt az iterator műveleteit, kategóriáit, előnyeit és hátrányait tárgyaljuk a kódokkal és a kimenetekkel. Megnézheti más kapcsolódó cikkeinket, hogy többet megtudjon-

  1. Tömbök C ++-ban
  2. Mi az a C ++?
  3. C ++ tömb funkciók
  4. Hurok a C ++ -ban
  5. PHP tömb funkciók | A PHP tömbfunkcióinak típusai

Kategória: