Ітератор STL

Друга важлива частина цього прикладу програми – використання класу iterator (итератор) У рядках коду

list&ltstring, allocator&ltstring&gt &gt::iterator list_iterator list_iterator = listStringsbegin()

ми визначаємо новий обєкт, званий ітератор, який посилається на початок списку У STL ітератор – це спосіб пройтися по елементах списку, не змінюючи порядку, в якому вони знаходяться у списку Ви також можете мати кілька ітераторів, що посилаються на один і той же список і вказують на різні позиції в списку Наприклад, я міг би визначити два ітератора і ходити вперед і назад по списку одночасно, написавши наступне:

list&ltstring, allocator&ltstring&gt &gt::

iterator forward_list_iterator list&ltstring, allocator&ltstring&gt &gt::

iterator backward_list_iterator forward_list_iterator = listStringsbegin() backward_list_iterator = listStringsend()

Для роботи з ітераторами ви можете використовувати оператори + + і – для руху вперед і назад Ітератори рухаються послідовно, так що немає прямого шляху для руху з точки A в точку C, якщо на шляху лежить точка B Ітератори важливі, оскільки вони надають спосіб маніпулювати даними в списку (або іншій структурі даних) без безпосередньої роботи

зі структурою даних Тому ви можете використовувати ітератор усюди, де хочете, навіть не знаючи насправді яким чином реалізована внутрішня структура даних Ітератори можуть бути різних типів Одні рухаються тільки вперед, інші тільки тому Деякі можуть бути використані тільки для читання, в той час як інші – для зміни даних, з якими вони працюють У будь-якому випадку, однак, оператор + + Проходитиме за даними, рухаючись від першого елемента до останнього Оператор – буде рухатися назад за структурою даних, від останнього елемента до першого Коли ітератор «вказує» на поточний елемент даних, як у попередньому прикладі з forward_list_iterator, то ви можете отримати внутрішній тип даних (у даному випадку рядок), використовуючи оператор *. Наприклад:

forward_list_iterator = listStringsbegin() string s = (*forward_list_iterator)

Якщо припустити, що в списку були елементи, то рядок s матиме таке ж значення, що і перший рядок у списку Так як оператор * повертає сам обєкт, то ви можете безпосередньо працювати з елементом списку, маніпулюючи обєктом iterator:

(*iterator)c_str()

Якщо итератор вказує на елемент-рядок у списку, то цей код поверне покажчик на символ (char *), який представляє рядок в даній позиції списку Так що в нашому попередньому прикладі итератор проходить по всіх елементах списку, передаючи символьний покажчик, який представляє елемент, у функцію printf, яка потім друкує значення в стандартний висновок Результат виведення цієї програми повинен бути такий:

Перший Другий Третій Четвертий Пятий Шостий

Для перевірки цієї теорії скомпілюйте програму, вибравши Build | Make в середовищі CBuilder Відкрийте вікно команд MS-DOS і запустіть програму, набравши project1 Ви повинні побачити висновок, що зявляється у вікні, і він повинен виглядати точно також, як ми тільки що показали в лістингу

Ось більш-менш все, що можна сказати про списки й ітератори списків Коли вам потрібен список у вашому додатку, просто додайте його в клас і вперед Списки, напевно, найкраще підходять для додатків, містять змінну кількість даних, які в основному послідовно переглядають ці дані і яким потрібна можливість додавати і видаляти дані в будь-якій позиції списку Адресні книги та інвентарні системи – хороший приклад типів додатків, побудованих на списках

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*