АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Векторы. Наиболее универсальным контейнерным классом является класс vector, представляющий собой подобие динамического массива

Читайте также:
  1. A) векторы прерывания
  2. Векторы
  3. Векторы в трехмерном пространстве
  4. Векторы и скаляры. Линейные действия над векторами.
  5. Комплексные числа и векторы
  6. Собственные векторы и собственные значения матриц

 

Наиболее универсальным контейнерным классом является класс 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

Функция-член   Описание
r ef erence_back();- const reference back() const;   Возвращает ссылку ка последний элемент вектора
iterator begin (); const iterator begin() const; Возвращает итератор, установленный ка первый элемент вектора  
void clear ();   Удаляет из вектора все элементы  
bool empty() const;   Возвpaщает значение true,если вектор пуст, в противном случае возвращает значение false
iterator end (); const_iterator end() const; Возвращает итератор, установленный на первый элемент вектора  
iterator erase (iterator i); Удаляет элемент, на который ссылается итератор i. Возвращает итератор, установленный на элемент, следующий за удаленным
iterator erase (iterator start, iterator end); Удаляет элементы из диапазона, заданного итераторами start и end. Возвращает итератор, установленный на элемент, следующий за последним удаленным  
reference front (); соnst reference front()соnst; Возвращает ссылку на первый элемент вектора
iterator insert (iterator i, const &val); Вставляет элемент val перед элементом, на который ссыпается итератор i. Возвращает итератор, установленный на элемент val
void insert (iterator i. size_type num, conet т &val) Вставляет num копий элемента val перед элементом, на который ссылается итератор i
template <class inIter> void insert (iterator i, InIter start, InIter end) Вставляет перед элементом, на который ссылается итератор последовательность элементов, заданную итераторами start и end
reference operator[ ](size_type i) const; const_reference operator[ ] (size_type i);   Возвращает ссылку на элемент, заданный итератором i
void pop_back(); Удаляет последний элемента вектора
void push_back(const T &val); Добавляет элемент val в конец вектора
size_type size() const; Возвращает текущее количество элементов вектора

 

Рассмотрим пример, иллюстрирующий основные операции над векторами.

 

# include <iostream>

#include <vector>

#include <cctype>

#include <windows>

using namespace std;


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)