Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Использование контейнера vector
Контейнер vector, в отличие от классов CArray, CList и CMap библиотеки MFC, относится к средствам стандартной библиотеки языка С++ и его надо рассматривать как альтернативу CArray. Использование vector однозначно целесообразно в приложениях, которые предполагается использовать на разных программных платформах. Класс vector представляет собой шаблонный класс для последовательных контейнеров, которые манипулируют элементами данного типа в линейной последовательности (in a linear arrangement) и позволяют быстрый произвольный доступ к любому элементу. Классы на основе этого шаблона являются наиболее предпочтительными контейнерами для наборов элементов, к которым требуется иметь высокоэффективный произвольный доступ. Объявление шаблона: template < class Type, class Allocator = allocator<Type> > class vector
Параметры шаблона: Type Тип элементов, сохраняемых в векторе Allocator Тип, который представляет собой объект, предназначенный для управления распределением памяти для вектора. Этот параметр не является обязательным и его можно не указывать. Значение параметра по умолчанию – allocator<Type>.
Замечания. Операции добавления элементов вектора в его конец, равно как и удаления его последних элементов требуют минимального времени и выполняются эффективно, в то время как выполнение таких операций применительно к элементам в середине вектора требуют больших затрат времени. Эффективное выполнение операций с элементами вектора, находящимися в его начале или конце, обеспечивает контейнер deque. Наконец, контейнер list наиболее предпочтителен для тех задач, где требуется вставлять и удалять элементы в/из любого места последовательности. Перераспределение памяти для вектора происходит тогда, когда необходимо увеличить размер вектора по сравнению с текущим. Вставки и удаления элементов вектора могут изменить адреса их размещения внутри последовательности. Во всех таких случаях итераторы или ссылки, которые указывают на изменившиеся части последовательности, становятся ошибочными и их значения надо обновить. Если перераспределения памяти не было, то итераторы и ссылки перед выполнением вставок или удалений порций вектора остаются действительными. Класс vector<bool> представляет собой полную специализацию (full specialization) шаблонного класса для элементов булевского типа с распределителем памяти, используемым специализацией для базового типа. Описания типов (Typedefs) класса vector представлены в табл.1, компонентные функции – в табл.2, операции – в табл. 3. Таблица 1 Описания типов класса vector
Таблица 2 Компонентные функции класса vector
Таблица 3 Перегруженные операции класса vector
Конструкторы Восемь конструкторов предназначены для создания (конкретного) класса вектор различными способами: изначально пустого вектора, вектора с заданным начальным числом элементов и т.д. Все конструкторы запоминают объект-распределитель памяти (allocator) и инициализируют вектор.
Параметры конструкторов:
Смысл значений итераторов вроде First и Last может прояснить следующая схема для вектора, состоящего из трех элементов (рис. 1).
Рис. 1. Смысл итераторов First и Last
Конструкторы класса vector: 1. vector(); Создание изначально пустого вектора 2. explicit vector( const Allocator& _Al); Создание изначально пустого вектора и задание объекта-распределителя памяти 3. explicit vector( size_type _Count); задает число элементов вектора _Count со значениями по умолчанию для типа элементов вектора. 4. vector( size_type _Count, const Type& _Val); задает число элементов вектора _Count с заданными начальными значениями _Val. 5. vector( size_type _Count, const Type& _Val, const Allocator& _Al); то же, что и предыдущий конструктор, плюс задание объекта-распределителя памяти 6. vector(const vector<Type, Allocator>& _Right); создает вектор-копию вектора-оригинала 7. template<class InputIterator> vector(InputIterator _First,InputIterator _Last); создает вектор-копию на основе заданного диапазона элементов [_First, _Last) вектора-оригинала 8. template<class InputIterator> vector(InputIterator _First,InputIterator _Last, 9. const Allocator& _Al); то же, что и предыдущий конструктор, плюс задание объекта-распределителя памяти
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-04-12; просмотров: 502. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |