На этом шаге мы рассмотрим контейнер "вектор".
Одним из контейнеров самого широкого назначения является вектор. Класс vector поддерживает динамический массив, который при необходимости может увеличивать свой размер. Для доступа к его элементам можно использовать стандартное обозначение индексации массивов. Шаблонная спецификация для класса vector выглядит так:
Template <class T, class Allocator = allocator<T> > class vector
Здесь T - тип сохраняемых данных, а элемент Allocator означает распределитель памяти, который по умолчанию использует стандартный распределитель. Класс 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());
Первая форма конструктора предназначена для создания пустого вектора. Вторая создает вектор, который содержит num элементов со значением val, причем значение val может быть установлено по умолчанию. Третья форма позволяет создать вектор, который содержит те же элементы, что и заданный вектор ob. Четвертая предназначена для создания вектора, который содержит элементы в диапазоне, заданном параметрами.
Рассмотрим несколько примеров объявления вектора.
vector<int> iv; // создание вектора нулевой длины для хранения int-значений. vector<char> cv(5); // создание 5-элементного вектора для хранения char-значений. vector<char> cv(5, 'x'); // Инициализация 5-элементного char-вектора. vector<int> iv2(iv); // Создание int-вектора на основе int-вектора iv.
Для вектора также определен оператор индексации "[]", который позволяет получить доступ к элементам вектора с помощью стандартной записи с использованием индексов.
Функции-члены, определенные в классе vector, перечислены в таблице 1. Самыми важными из них являются size(), begin, end(), push_back(), insert() и erase().
Функция-член | Описание |
---|---|
template <class InIter> void assign(InIter start, InIter end); | Помещает в вектор последовательность, определяемую параметрами start и end |
void assign (size_type num, const T &val); | Помещает в вектор num элементов со значением val |
reference at (size_type i); const_reference at(sizetype i) const; |
Возвращает ссылку на элеменет, заданный параметром i |
reference back(); const_reference back() const; |
Возвращает ссылку на последний элемент в векторе |
iterator begin(); const_iterator begin() const; |
Возвращает итератор для первого элемента в векторе |
size_type capacity() const; | Возвращает текущую емкость вектора, или количество элементов, которое может храниться в векторе до того, как возникнет необходимость в выделении дополнительной памяти |
void clear(); | Удаляет все элементы из вектора |
bool empty() const; | Возвращает истинное значение, если используемый вектор пуст, и ложное значение в противном случае |
const_iterator end() const; iterator end(); |
Возвращает итератор для конца вектора |
iterator erase (iterator i); | Удаляет элемент, адресуемый итератором i; возвращает итератор для элемента, расположенного после удаленного |
iterator erase (iterator start, iterator end); | Удаляет элементы в диапазоне, задаваемом параметрами start и end; возвращает итератор для элемента, расположенного за последним удаленным элементом |
reference front(); const_reference front() const; |
Возвращает ссылку на первый элемент в векторе |
allocator_type get_allocator() const; | Возвращает распределитель памяти вектора |
iterator insert (iterator I, const T &val = T()); | Вставляет значение val непосредственно перед элементом, заданным параметром i; возвращает итератор для этого элемента |
void insert (iterator I, size_type num, const T &val); | Вставляет num копий значения val непосредственно перед элементом, заданным параметром i |
template <class InIter> void insert( iterator i, InIter start, InIter end); | Вставляет в вектор последовательность элементов, определяемую параметрами start и end, непосредственно перед элементом, заданным параметром i |
size_type max_size() const; | Возвращает максимальное число элементов, которое может содержать вектор |
reference operator[] (size_type i) const; const_reference operator[] (size_type i) const; |
Возвращает ссылку на элемент, заданный параметром i |
void pop_back(); | Удаляет последний элемент в векторе |
void push_back(const T &val); | Добавляет в конец вектора элемент, значение которого задано параметром val |
reverse_iterator rbegin(); const_reverse_iterator rbegin() const; |
Возвращает реверсивный итератор для конца вектора |
reverse_iterator rend(); const_reverse_iterator rend() const; |
Возвращает реверсивный итератор для начала вектора |
void reserve(size_type num); | Устанавливает емкость вектора равной значению не менее заданного num |
void resize(size_type num, T val = T()); | Устанавливает размер вектора равным значению, заданному параметром num. Если вектор для этого нужно удлинить, то в его конец добавляются элементы со значением, заданным параметром val |
size_type size() const; | Возвращает текущее количество элементов в векторе |
void swap(deque<T, Allocator> &ob); | Выполняет обмен элементами вызывающего вектора и вектора ob |
На следующем шаге мы рассмотрим создание консольных приложений в C++ Builder.