Вступ до Ітератора в C ++

Переміщення ваших дуже складних даних, що зберігаються в різних типах контейнерів, таких як масив, вектор тощо, за найменший час виконання, можливо через Iterator в C ++, складовій стандартної бібліотеки шаблонів (STL). Не хвилюйтеся, це просто вказівник, як об’єкт, але він розумний, оскільки не має значення, який контейнер ви використовуєте, він зробить ваш алгоритм незалежним від типу контейнера, надавши загальний інтерфейс для всіх типів контейнера, як міст між алгоритм та контейнер. Iterator не тільки зменшує складність програми, а й робить час виконання набагато швидшим.

Наприклад, алгоритм sort (), який має два параметри, закінчуючи і запускаючи ітератор, буде виконувати сортування в порядку незалежно від типу контейнера, який ви використовуєте. Ітератор дозволяє застосовувати загальні алгоритми до структур даних. Структури даних можуть використовувати Ітератор для викриття ряду елементів.

Операції з використанням ітератора

  • begin (): Ця функція поверне ітератор, що вказує на перший елемент контейнера.
  • end (): Ця функція поверне ітератор, що вказує на минулий останній елемент контейнера.
  • наперед (): Ця функція збільшить позицію ітератора до вказаного аргументу.
  • next (): Ця функція поверне новий ітератор, який буде вказаний ітератором після збільшення позицій в аргументах.
  • попередній (): Ця функція поверне новий ітератор, який буде вказаний ітератором після декрементування позицій в аргументах.
  • insertter (): Ця функція буде вставляти елемент у будь-якому положенні контейнера.

Практичне втілення

1. C ++ код для реалізації Ітератора

Код

#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): Ітератор лише для зберігання, ітератор, призначений лише для запису, який використовується для зміни значення контейнера. Вони також мають дуже обмежений функціонал. Ітератор не може отримати доступ до елемента. Оператор присвоєння (=) та оператор збільшення (++) можуть використовуватися в якості ітераторів виводу. Тільки в алгоритмі з одним проходом.
  • Forte Iterator (окремо пов'язаний список): Цей ітератор містить функціональні можливості як вхідних, так і вихідних ітераторів. Він може рухатися вперед одним напрямком в напрямку. Для читання та запису в контейнер це найбільш бажаний ітератор, який підтримує повторне використання та збереження. Він підтримує всі перераховані вище оператори.
  • Двонаправлений ітератор (подвійний зв’язок списку): як назва вже пропонує двонаправлену, що робить його сильнішим за вищенаведені ітератори. Він також підтримує читання та запис у контейнер. Він підтримує оператор Decrement (-).
  • Ітератор випадкового доступу (масиви): Найсильніший ітератор - це найпотужніший ітератор, оскільки він може читати, записувати та отримувати доступ довільно. Покажчик, як функціональність, як додавання та віднімання вказівника.

Переваги Iterator в C ++

Якщо вам потрібно перейти від одного елемента, ітератор наразі вказує на інший елемент, який потенційно знаходиться за n кроків від поточного ітератора. Перші чотири в ієрархії потребуватимуть лінійної кількості часу для цього, хоча ітератор випадкового доступу може робити це в постійний час, і це є більш захоплюючим, оскільки саме там економиться час. Це найважливіша особливість, яку надає ітератор. Деякі з них згадуються нижче

  • Ефективність коду: Якщо у нас є P види контейнерів даних і Q-речей, які ми хочемо зробити з ними, тоді ми закінчимо писати алгоритми P * Q. Якщо дані також є різними типами R, ми можемо закінчити алгоритм P * Q * R. Отже, використовуючи ітератори, ми можемо це зробити в алгоритмі P + Q. Ми заощадили 90% часу та роботи. Підвищення ефективності коду на наступний рівень. Концепція ефективності полягає в тому, що ітератор введення над джерелом та ітератор виводу над цільовою послідовністю не повинні бути одного типу.
  • Динамічна обробка: Ітератори мають динамічні функції, такі як заміна в одному контейнері, присвоєння копії, збільшення, перенаправлення та декрементування. Ітератор забезпечує функціональність для видалення та динамічного додавання елементів до контейнера. Оскільки всі ітератори можна збільшувати, ітератори введення можна порівнювати та відновлювати значення. Двонаправлені ітератори можна зменшити. Основний аспект - написати одну функцію і використовувати її для будь-якого контейнера.

Недоліки Ітератора в C ++

  • Не можна одночасно переходити з однієї структури даних в іншу складним чином. Ітератор не працюватиме в такому випадку.
  • Якщо ви обробляєте список, і ви щось забули, і тепер ви хочете повернутися назад, ви не можете, тому що ітератори не працюватимуть таким чином.
  • Якщо вам потрібно оновити структуру під час проїзду, ви також не можете цього зробити через ітераторського способу зберігання його позиції.

Висновок

Під час використання ітераторів завжди пам’ятайте про ці дві речі, щоб зробити код ефективним. Завжди передавайте ітератор у функцію замість контейнерів. Ніколи не слід повертати контейнери замість повернення чи проходження ітератора. Ви можете отримати будь-який елемент за допомогою ітератора, дереференції та передачі пари ітератора в алгоритм

Рекомендовані статті

Це посібник з Ітератора в C ++. Тут ми обговорюємо операції в ітераторі, категорії, переваги та недоліки з кодами та виходами. Ви також можете ознайомитись з іншими пов'язаними з нами статтями, щоб дізнатися більше -

  1. Масиви в C ++
  2. Що таке C ++
  3. Функції масиву C ++
  4. Петлі в C ++
  5. Функції масиву PHP | Типи функцій масиву в PHP