|
|||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Векторы. Наиболее универсальным контейнерным классом является класс vector, представляющий собой подобие динамического массива
Наиболее универсальным контейнерным классом является класс vector, представляющий собой подобие динамического массива, размеры которого могут изменяться по мере необходимости. Как известно, в языке C++ размер массива фиксируется на этапе компиляции. Этот способ определения массивов наиболее эффективен. Однако он связан с серьезными ограничениями, поскольку размер массива в ходе программы изменяться не может. Класс vector разрешает эту проблему, выделяя столько динамической памяти, сколько потребуется. Главное отличие вектора от массива C++ состоит в том, что вектор всегда "знает", сколько элементов он хранит, и может динамически изменять свой размер. Добавление новых элементов в конец вектора выполняется очень быстро, но операция по вставке новых элементов в начало или в середину вектора требует значительных затрат по времени. Несмотря на то что вектор является динамическим массивом, для доступа к его элементам можно использовать обычный способ индексации. Класс vector содержит следующие конструкторы.
explicit vector(const Allocator &a = Allocator ()); explicit vector(size_type num,const T &val = T(), const Allocator &a = Allocator()); vector(const vector<T, Allocator> &ob); template <class InIter> vector (InIter start, InIter end, const Allocator &a = Allocator());
Чтобы обеспечить максимальную гибкость и машинонезависимость, любой объект, хранящийся в векторе, должен определять конструктор по умолчанию, а также операторы "<" и "==". Некоторые компиляторы налагают на такие объекты дополнительные ограничения. Все встроенные типы по умолчанию удовлетворяют этим условиям. Непреднамеренные неявные преобразования типов, оказались источником трудно обнаруживаемых ошибок. Поэтому в стандарт C++ было добавлено ключевое слово explicit, говорящее компилятору, что такие преобразования не нужны
Первый конструктор создает пустой вектор. Второй конструктор создает вектор, состоящий из num элементов, имеющих значение val, которое можно задавать по умолчанию. Третий конструктор создает вектор, содержащий элементы вектора ob. Четвертый конструктор создает вектор, состоящий из элементов, лежащих в диапазоне, определенном итераторами start и end. В STL, класс вектора носит имя std::vector<T>
Рассмотрим конструкторы класса.
vector<int> iv; // Создается пустой вектор типа int. vector<char> cv(5); // Создается вектор типа char, // состоящий из пяти элементов. vector<char> ev(5, 'x');//Инициализируется вектор типа char, // состоящий из пяти элементов. vector<int> iv2(iv); // Создается вектор типа int, который // инициализируется другим // целочисленным векторок.
В классе vector определены следующие операторы сравнения:
==, <, <=,!=, >, >=
Кроме того, в классе vector определен оператор "[ ] ". Это позволяет обращаться к элементам вектора с помощью стандартной индексации массива. Функции-члены, определенные в классе vector, перечислены в табл. 1. К наиболее распространенным функциям — членам класса vector относятся функции-члены size(), begin(), and(), push_back(), insert() и erase(). Функция size() возвращает текущий размер вектора. Эта функция довольно полезна, поскольку с ее помощью можно определить размер вектора в ходе выполнения программы. Напомним, что векторы могут изменять свои размеры по мере необходимости, поэтому их размер определяется во время выполнения программы, а не на этапе компиляции. Функция begin() возвращает итератор, установленный на начало вектора. Функция end() возвращает итератор, установленный на конец вектора. Функция push_back() записывает значение в конец вектора. Если вектор заполнен, при записи его размер увеличивается. Функция insert() предназначена для записи в середину вектора. Кроме того, вектор можно инициализировать. В любом случае для доступа к элементпм вектора можно применять обычные обозначения индексации. Для удаления элемента из вектора предназначена функция erase().
Т аблица 1. Функции, определенные в классе vector
Рассмотрим пример, иллюстрирующий основные операции над векторами.
# include <iostream> #include <vector> #include <cctype> #include <windows> using namespace std; Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |