Класс vector. Динамический массив. Общие сведения. Обзор методов. Создание динамического массива. Способы доступа к элементам вектора
Данная тема является началом изучения средств класса vector, который представляет собой динамический массив.
Содержание
- 1. Общие сведения о классе vector. Обзор методов класса
- 2. Создание динамического массива типа vector. Конструкторы. Пример
- 3. Способы доступа к элементам вектора. Индексирование [ ]
- Связанные темы
Поиск на других ресурсах:
1. Общие сведения о классе vector. Обзор методов класса
Класс vector представляет собой динамический массив, размер которого в программе может изменяться при необходимости. Этот класс является одним из самых универсальных и распространенных в использовании при написании программ на C++. Доступ к элементам класса осуществляется как к обычному массиву с помощью квадратных скобок [ ].
Чтобы использовать методы и константы массива типа vector нужно подключить заголовок <vector> и пространство имен std
#include <vector> using namespace std;
Шаблонная спецификация класса vector имеет следующий вид:
template <class T, class Allocator = allocator<T> > class vector
здесь
- T – тип элементов массива. Это может быть любой базовый тип (int, float, char и т.д.) или тип, разработанный пользователем;
- Allocator — название класса, обеспечивающего распределение памяти.
Методы класса vector можно условно разбить на 3 группы:
- 1. Методы, определяющие и изменяющие общие характеристики массива.
- 1.1. Метод size(). Определить размер вектора
- 1.2. Метод max_size(). Максимально допустимый размер массива
- 1.3. Метод capacity(). Определить размер массива с учетом зарезервированной памяти
- 1.4. Метод empty(). Определить, пустой ли вектор
- 1.5. Метод shrink_to_fit(). Выровнять размер массива с учетом зарезервированной памяти по фактическому размеру массива
- 1.6. Метод reserve(). Зарезервировать память для дополнительных элементов массива
- 1.7. Метод resize(). Изменить размер массива
- 2. Методы, модифицирующие (изменяющие) данные в массиве
- 2.1. Метод push_back(). Добавить элемент в конец вектора
- 2.2. Метод pop_back(). Удалить последний элемент вектора
- 2.3. Метод clear(). Удаляет из массива все элементы
- 2.4. Метод swap(). Обмен местами двух векторов
- 2.5. Присваивание массивов. Перегруженный оператор =
- 2.6. Метод erase(). Удалить один или несколько элементов заданного диапазона
- 2.7. Метод insert(). Вставляет элемент или группу элементов в вектор
- 2.7.1. Вставка списка инициализации в вектор
- 2.7.2. Вставка элемента заданное количество раз в заданную позицию
- 2.7.3. Вставка одиночного элемента в заданную позицию
- 2.7.4. Вставка нескольких элементов из заданного диапазона
- 2.8. Метод assign(). Создать массив из существующих данных
- 3. Методы, обеспечивающие доступ к элементам массива
- 3.1 Метод at(). Получить элемент вектора по его позиции (индексу)
- 3.2. Метод front(). Возвращает ссылку на первый элемент вектора
- 3.3. Метод back(). Возвращает ссылку на последний элемент вектора
- 3.4. Метод data(). Получить указатель на вектор
- 3.5. Метод begin(). Вернуть итератор, указывающий на первый элемент вектора
- 3.6. Метод end(). Вернуть итератор, указывающий на последний элемент массива
- 3.7. Методы cbegin(), cend(). Получить константный итератор на начало и конец массива
- 3.8. Методы rbegin(), rend(). Доступ к элементам массива с помощью реверсного итератора
- 3.9. Методы crbegin(), crend(). Установить на начало и конец массива константный реверсный итератор
⇑
2. Создание динамического массива типа vector. Конструкторы. Пример
Для создания массива в классе vector объявляется ряд конструкторов. Ниже приведены наиболее распространенные из них.
Чтобы создать пустой массив используется конструктор:
explicit vector(const Allocator &a = Allocator());
Чтобы создать массив, который содержит num элементов со значением val, используется конструктор
explicit vector(size_t num, const T &val = T(), const Allocator &a = Allocator());
Чтобы создать массив на основе другого массива ob, нужно использовать конструктор
vector(const vector<T, Allocator> &ob);
Чтобы создать массив на основе диапазона на который указывают итераторы start и end, используется следующий конструктор
template <class InIter> vector<InIter start, InIter end, const Allocator &a = Allocator());
Пример. В примере создаются различные массивы типа vector.
#include <vector> using namespace std; ... // 1. Создать вектор из 10 чисел типа int vector<int> A1(10); // 2. Создать пустой вектор, элементы которого имеют тип char vector<char> A2; // 3. Создать вектор из 5 чисел типа double, // записать в вектор значения 1.0 vector<double> A3(5, 1.0); // 4. На основании вектора A3 создать новый вектор A4 vector<double> A4(A3); // 5. Создать вектор на основании итераторов, которые указывают на // элементы вектора A4 с индексами от 0 до 1. vector<double>::iterator start, end; // объявить итераторы start = A4.begin(); // установить первый итератор на позицию 0 end = A4.begin() + 2; // второй итератор в позиции 2 (позиция после 1) vector<double> A5(start, end); // создать вектор ...
⇑
3. Способы доступа к элементам вектора. Индексирование [ ]
После создания вектора, можно получать доступ к его элементам одним из следующих способов:
- с помощью операции индексирования [ ], как в случае с обычным массивом;
- с помощью итератора;
- с помощью метода at().
Примеры доступа к элементам вектора.
#include <vector> using namespace std; ... // 1. Доступ к вектору з помощью индексатора [] // 1.1. Создать вектор из 5 чисел типа int vector<int> A1(5); // 1.2. Записать в вектор значение [ 1, 2, 3, 4, 5 ] for (int i = 0; i < A1.size(); i++) A1[i] = i + 1; // 1.3. Вывести вектор на экран for (int i = 0; i < A1.size(); i++) cout << A1[i] << " "; cout << endl; // 2. Доступ к элементам вектора с помощью итераторов // 2.1. Создать вектор из 5 чисел типа float vector<float> A2(5); // 2.2. Объявить итератор на вектор типа float vector<float>::iterator p; // 2.3. Записать в вектор числа [ 1.1, 2.2, 3.3, 4.4, 5.5 ] // с помощью итератора p = A2.begin(); int i = 0; while (p != A2.end()) { *p = (float)((i + 1) + (i + 1) * 0.1); p++; i++; } // 2.4. Вывести вектор с помощью итератора p = A2.begin(); while (p != A2.end()) { cout << *p << " "; p++; } cout << endl; // 3. Доступ к элементам вектора с помощью метода at() // Метод at() - получить элемент вектора по его позиции vector<double> A3(5); // Создать массив из 5 элементов типа double // Заполнить произвольными значениями A3.at(0) = 2.8; // A3[0] = 2.8; A3.at(1) = 3.3; // A3[1] = 3.3; ...
⇑
Связанные темы
- Методы, определяющие и изменяющие общие характеристики массива: size(), max_size(), capacity(), empty(), shrink_to_fit(), resize(), reserve()
- Методы, изменяющие данные в массиве. Методы push_back(), pop_back(), clear(), swap(), operator=(), erase(), insert(), assign()
- Методы, обеспечивающие доступ к элементам массива: at(), front(), back(), data(), begin(), end(), cbegin(), cend(), rbegin(), rend(), crbegin(), crend()
⇑