Въведение в Iterator в C ++

Преминаването през вашите изключително сложни данни, съхранявани в различни типове контейнери като Array, Vector и т.н., в най-малкото време за изпълнение е възможно поради Iterator в C ++, компонент на библиотеката на стандартни шаблони (STL). Не се притеснявайте, че е просто указател като обект, но е интелигентен, защото няма значение какъв контейнер използвате, той ще направи алгоритъма ви независим от типа контейнер, като предостави общ интерфейс за всички видове контейнери, като мост между алгоритъм и контейнер. Iterator не само намалява сложността на дадена програма, а и прави времето за изпълнение много по-бързо.

Например алгоритъмът sort (), който има два параметъра, завършващ и стартиращ итератор, ще извърши сортирането по реда, независимо от какъв тип контейнер използвате. Iterator позволява прилагането на общи алгоритми към структури от данни. Структурите на данните могат да използват Iterator, за да разкрият набор от елементи.

Операции с помощта на Iterator

  • start (): Тази функция ще върне итератор, сочещ към първия елемент на контейнера.
  • end (): Тази функция ще върне итератор, сочещ към миналото последния елемент на контейнера.
  • напред (): Тази функция ще увеличи позицията на итератора до посочения аргумент.
  • next (): Тази функция ще върне новия итератор, който ще бъде посочен от итератора след увеличаване на позициите в аргументите.
  • предишен (): Тази функция ще върне новия итератор, който ще бъде посочен от итератора след декрементиране на позициите в аргументите.
  • insertter (): Тази функция ще вмъкне елемента във всяка позиция в контейнера.

Практическо изпълнение

1. C ++ код за изпълнение на Iterator

код

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

изход:

2. C ++ код, за да се покаже функционалността на итератора

код

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

изход:

Категории итератор

Към C ++ 17, има 5 различни типа итератори, които могат да бъдат класифицирани в зависимост от типа функционалност, както е показано на схемата по-долу:

  • Входен итератор (stdin) : Поради ограничената функционалност, те са най-слаби от всички итератори с функция за четене и движение напред. Не може да промени стойността на контейнера. Оператор за отклонение (*), не равен оператор (! =), Оператор на увеличение (++) и равен оператор (==) могат да се използват като входни итератори. Също така за последователни операции за въвеждане.
  • Изходен итератор (stdout): Итератор само за съхраняване на итератор само за запис, който се използва за промяна на стойността на контейнер. Те също имат много ограничена функционалност. Итераторът не може да получи достъп до елемента. Операторът за присвояване (=) и операторът за повишаване (++) могат да бъдат използвани като изходни итератори. Само в алгоритъм с едно преминаване.
  • Препращащ итератор (отделно свързан списък): Този итератор съдържа функционалността както на входните, така и на изходните итератори. Той може да се движи напред в посока с една стъпка в един момент. За четене и запис в контейнер е най-предпочитаният итератор, който поддържа повторна употреба и записване. Той поддържа всички горепосочени оператори.
  • Двупосочен итератор (двойно свързан списък): Както името вече подсказва двупосочно, което го прави по-силен от горните итератори. Той също така поддържа четене и запис в контейнер. Той поддържа оператора Decrement (-).
  • Итератор на случаен достъп (масиви): Най-силният итератор е най-мощният итератор, тъй като може да чете, записва и да има достъп до случаен принцип. Функция като показалец като събиране и изваждане на показалец.

Предимства на Iterator в C ++

Ако трябва да преминете от един елемент, в момента итераторът сочи към друг елемент, който е потенциално n крачки от текущия ви итератор. Първите четири в йерархията ще отнемат линеен период от време, докато итераторът на случаен достъп може да го направи в постоянно време и това е много по-завладяващо, защото там се спестява времето. Това е най-важната функция, която Iterator предоставя. Някои по-долу са споменати по-долу

  • Кодова ефективност: Ако имаме P видове контейнери с данни и Q неща, които искаме да правим с тях, тогава ще приключим с писането на P * Q алгоритми. Ако данните също са от R различни видове, тогава може да завършим с алгоритъма P * Q * R. Така че, използвайки итераторите, можем да го направим в алгоритъма P + Q. Спестихме 90% от времето и работата. Превръщане на ефективността на кода на следващото ниво. Концепцията зад ефективността е, че итераторът на вход над източника и изходният итератор над целевата последователност не трябва да са от същия тип.
  • Динамична обработка: Итераторите имат динамични функционалности като замяна в един и същ контейнер, присвояване на копие, увеличаване, пренасочване и декрементиране. Итераторът осигурява функционалността за премахване и динамично добавяне на елементи в контейнера. Тъй като всички итератори могат да бъдат увеличени, итераторите на вход могат да се сравняват и пренасочват към стойност. Двунасочните итератори могат да бъдат намалени. Основният аспект е да напишете една функция и да я използвате за всеки контейнер.

Недостатъци на Iterator в C ++

  • Не можете едновременно да преминавате от една структура на данни в друга по сложен начин. В този случай итераторът няма да работи.
  • Ако обработвате списък и сте забравили нещо и сега искате да се върнете назад, не можете, защото итераторите няма да работят по този начин.
  • В случай, че трябва да актуализирате структурата по време на преминаване, не можете да го направите и поради итераторския начин на запазване на нейната позиция.

заключение

Докато използвате итераторите, имайте предвид тези две неща, за да направите кода ефективен. Винаги предавайте итератора във функция вместо контейнери. Никога не трябва да връщате контейнери вместо връщане или преминаване на итератор. Можете да получите всеки елемент с помощта на итератор, дерегистрация и предаване на двойка итератор към алгоритъм

Препоръчителни статии

Това е ръководство за Iterator в C ++. Тук обсъждаме операциите в итератора, категории, предимства и недостатъци с кодове и изходи. Можете също да разгледате и другите ни свързани статии, за да научите повече-

  1. Масиви в C ++
  2. Какво е C ++
  3. Функции на масив C ++
  4. Цикли в C ++
  5. Функции на масив PHP | Видове функции на масив в PHP