Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

236 Глава 6. Список и Iterator adTs

6.1.4 Векторы STL

В Разделе 1.5.5 мы ввели векторный класс C ++ Стандартный Шаблон

Библиотека (STL). Мы упомянули, что векторы STL ведут себя во многом как стандартные множества в C ++, но они превосходят стандартные множества во многих отношениях. В этой секции мы исследуем этот класс более подробно.

Стандартная Библиотека Шаблона обеспечивает C ++ программисты много полезных встроенных классов и алгоритмов. Классы, обеспеченные STL, организованы в различных группах. Среди самых важных из этих групп набор классов, названных контейнерами. Контейнер - структура данных, которая хранит коллекцию Оби - jects. Многие структуры данных, которые мы изучаем позже в этой книге, такой как стеки, очереди и списки, являются примерами контейнеров STL. Вектор класса - возможно, самый основной пример контейнерного класса STL. Мы обсуждаем контейнеры далее в Разделе 6.2.1.

Определение вектора класса дано в системе, включают файл, названный «vec-скалистая вершина». Векторный класс - часть станд. namespace, таким образом, любой необходимо использовать «станд.:: вектор» или предоставлять соответствующее заявление использования. Векторный класс - tem-, покрытый металлом с классом отдельных элементов. Например, кодовый фрагмент ниже объявляет вектор, содержащий 100 целых чисел.

#include <вектор> //предоставляет определение вектора

использование станд.:: вектор; //делают вектор доступным

вектор <интервал> myVector (100); //вектор с 100 целыми числами

Мы именуем тип отдельных элементов как основной тип вектора. Каждый элемент

инициализирован к значению по умолчанию основного типа, которое для целых чисел является нолем.

Векторные объекты STL ведут себя во многих отношениях как стандарт C ++ множества, но они обеспечивают много дополнительных функций.

• Как со множествами, отдельные элементы векторного объекта могут быть внесены в указатель, используя

обычный оператор индекса (» []»). К элементам может также получить доступ участник

в функцию заходят. Преимущество этой членской функции по оператору индекса состоит в том, что она выполняет проверку диапазона и производит ошибочное исключение, если индекс выходит за пределы.

• В отличие от C ++ множества, векторы STL могут быть динамично изменены, и новый ele-

монетные дворы могут быть эффективно приложены или удалены из конца множества.

• Когда вектор STL объектов класса разрушен, он автоматически призывает

печь для сжигания отходов производства для каждого из ее элементов. (С C ++ множества, это - обязательство

из программиста, чтобы сделать это явно.)

• Векторы STL обеспечивают много полезных функций, которые воздействуют на весь vec-

скалистые вершины, не только на отдельных элементах. Это включает, например, способность

скопировать все или часть одного вектора другому, способность сравнить содержание двух множеств и способность вставить и стереть многократные элементы.

6.1. Векторы 237

Вот основные членские функции векторного класса. Позвольте V быть объявленными

быть вектором STL некоторого основного типа и позволять e обозначить единственный объект этого того же самого основного типа. (Например, V вектор целых чисел, и e - целое число.)

вектор (n): Постройте вектор с пространством для n элементов; если никакой argu-

ment дан, создайте пустой вектор.

размер (): Возвратите ряд элементов в V. пустой (): Возвратитесь верный, если V пустое и ложный иначе. измените размеры (n): Измените размеры V, так, чтобы у этого было пространство для n элементов.

зарезервируйте (n): Просите, чтобы ассигнованное место для хранения было достаточно большим

держать n элементы.

оператор [я]: Возвратите ссылку на ith элемент V.

в (i): То же самое как V [я], но бросок из исключения диапазона, если я

за пределы, то есть, если я <0 или я³ V.size ().

фронт (): Возвратите ссылку на первый элемент V.

назад (): Возвратите ссылку на последний элемент V.

пододвиньте (e) обратно: Приложите копию элемента e до конца V, таким образом

увеличение его размера одним.

трещите назад (): Удалите последний элемент V, таким образом уменьшив его размер

один.

Когда основной тип вектора STL - класс, все копирование элементов (для

пример, в пододвигают обратно), выполнен, призвав конструктора копии класса. Кроме того, когда элементы разрушены (например, призывая разрушителя или популярность назад членская функция), печь для сжигания отходов производства класса призвана на каждого, удалил ele-ment. Векторы STL растяжимые - когда текущее пространство множества исчерпано, его размер хранения увеличен.

Хотя мы не обсудили его здесь, вектор STL также поддерживает функции для вставки элементов в произвольных положениях в пределах вектора, и для удаления произвольных элементов вектора. Они обсуждены в Разделе 6.1.4.

Есть оба сходства и различия между нашим классом ArrayVector Раздела 6.1.3 и векторным классом STL. Одно различие - то, что конструктор STL допускает произвольное число начальных элементов, тогда как наш довод «против» ArrayVect - structor всегда начинается с пустого вектора. Вектор STL функционирует V.front ()

и V.back () эквивалентны нашим функциям V [0] и V [n- 1], соответственно, где

n равен V.size (). Вектор STL функционирует V.push назад (e) и V.pop назад ()

эквивалентны нашим функциям ArrayVect V.insert (n, e) и V.remove (n- 1), пере -

spectively.