C ++ для початківців
2.8. Стандартний масив - це вектор
Хоча вбудований масив формально і забезпечує механізм контейнера, він, як ми бачили вище, не підтримує семантику абстракції контейнера. До прийняття стандарту C ++ для програмування на такому рівні ми повинні були або придбати потрібний клас, або реалізувати його самостійно. Тепер же клас масиву є частиною стандартної бібліотеки C ++. Тільки називається він не масив, а вектор.
Зрозуміло, вектор реалізований у вигляді шаблону класу. Так, ми можемо написати
Є дві істотні відмінності нашої реалізації шаблону класу Array від реалізації шаблону класу vector. Перша відмінність полягає в тому, що вектор підтримує як привласнення значень існуючим елементам, так і вставку додаткових елементів, тобто динамічно зростає під час виконання, якщо програміст вирішив скористатися цією його можливістю. Друга відмінність більш радикально і відображає істотну зміну парадигми проектування. Замість того щоб підтримати великий набір операцій-членів, які можна застосувати до вектору, таких, як sort (), min (), max (), find () і так далі, клас vector надає мінімальний набір: операції порівняння на рівність і на менше, size () і empty (). Більш загальні операції, перераховані вище, визначені як незалежні узагальнені алгоритми.
Для використання класу vector ми повинні включити відповідний заголовки.
Так само, як наш клас Array, клас vector підтримує операцію доступу за індексом. Ось приклад перебору всіх елементів вектора:
Для такого перебору можна також використовувати ітераторную пару. Итератор - це об'єкт класу, що підтримує абстракцію вказівного типу. У шаблоні класу vector визначені дві функції-члена - begin () і end (), що встановлюють итератор відповідно на перший елемент вектора і на елемент, який слід за останнім. Разом ці дві функції задають діапазон елементів вектора. Використовуючи итератор, попередній приклад можна переписати таким чином:
Визначення змінної iter
переміщує ітератор на наступний елемент вектора. Щоб отримати сам елемент, потрібно застосувати операцію разименованія:
Щоб застосувати алгоритм sort () тільки до першої половини вектора, ми напишемо:
Роль ітераторной пари може грати і пара покажчиків на елементи вбудованого масиву. Нехай, наприклад, нам дано масив:
Впорядкувати весь масив можна викликом алгоритму sort ():
Так можна впорядкувати перші чотири елементи:
Для використання алгоритмів в програму необхідно включити заголовки
Нижче наведено приклад програми, що використовує різноманітні алгоритми в застосуванні до об'єкта типу vector:
(Класи векторів, відображень та інших контейнерів в подробицях описуються в розділі 6. Ми спробуємо реалізувати систему текстового пошуку, використовуючи ці класи. У розділі 12 розглянуті узагальнені алгоритми, а в Додатку наводяться приклади їх використання.)
У цьому розділі були дуже побіжно розглянуті основні аспекти програмування на С ++, основи об'єктно-орієнтованого підходу стосовно до даного мови та використання стандартної бібліотеки. У наступних розділах ми розберемо ці питання більш докладно і систематично.
Вправа 2.22
Поясніть результати кожного з наступних визначень вектора: