Векторы в С++.

Вектор в C++ — это замена стандартному динамическому массиву, память для которого выделяется вручную, с помощью оператора new. Если вы хотите использовать векторы в своей программе, необходимо подключить заголовочный файл <vector>:

#include <vector>

Пример создания вектора

#include <iostream>
#include <vector>

int main()
{
    // Вектор из 10 элементов типа int
    std::vector<int> v1(10);

    // Вектор из элементов типа float
    // С неопределенным размером
    std::vector<float> v2;

    // Вектор, состоящий из 10 элементов типа int
    // По умолчанию все элементы заполняются нулями
    std::vector<int> v3(10, 0);

    return 0;
}

Основные методы класса vector

  • pop_back() — удалить последний элемент
  • clear() — удалить все элементы вектора
  • empty() — проверить вектор на пустоту
  • push_back — добавить элемент в конец вектора
  • insert(***) — три варианта(перезагрузки метода) вставки в какую либо область в векторе, первый параметр позиция вставки заданная итераторам, остальные указывают на контейнер, или количество и контейнер, или пару итераторов указывающих от какой до какой позиции из другого контейнера взять данные.
  • erase — удаляет элемент или последовательность элементов из вектора
  • begin() — возвращает итератор, указывающий на начало коллекции.
  • end() — возвращает итератор, указывающий на конец коллекции. При этом он указывает не самый последний элемент, а на воображаемый элемент за последним.
  • at(index) — метод доступа, к элементам коллекции, в отличии от оператора [], проверяет выход из-за границ коллекции, и в случаи чего генерирует исключение.

Объем вектора и изменение размера

Типичная реализация вектора — это указатель на динамический массив. Размер вектора — это фактическое число элементов, а объём — количество используемой им памяти. Если при вставке в вектор новых элементов, его размер становится больше его объёма, происходит перераспределение памяти. Как правило, это приводит к тому, что вектор выделяет новую область хранения, перемещая элементы и свободные старые области в новый участок памяти. Поскольку адреса элементов в течение этого процесса меняются, любые ссылки или итераторы элементов в векторе могут стать недействительными. Использование недействительных ссылок приводит к неопределенному поведению. Например:

#include <vector>
int main() {
  std::vector<int> v(1); // Создаем вектор, состоящий из одного элемента типа int, значение которого равно 0
 
  int& first = *v.begin(); // Создаем ссылку на первый элемент
 
  v.insert(v.end(), v.capacity(), 0); // Добавляем новые элементы
 
  int i = first; // Неопределенное поведение. Ссылка может быть недействительной
}

Метод reserve() используется для предотвращения ненужного перераспределения памяти. После вызова reserve(n), объем вектора гарантированно будет не меньше n. Например:

#include <vector>
int main() {
  std::vector<int> v(1); // Создаем вектор, состоящий из одного элемента типа int, значение которого равно 0
 
  v.reserve(10); // Резервируем место
 
  int& first = *v.begin(); // Создаем ссылку на первый элемент
 
  v.insert(v.end(), 5, 0); // Добавляем элементы в вектор
 
  int i = first; // OK, т.к не было перераспределения памяти
}

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Локальные и глобальные переменные в С++.

Локальные и глобальные переменные в С++.

Каждая переменная имеет свою область видимости, то есть такую область, в которой можно работать с переменной. За пределами этой области, о данной переменной ничего известно

 
Математические функции в С++

Математические функции в С++

В языке С++ математические функции определены в заголовочном файле <cmath> функции выполняющие некоторые часто используемые математические задачи. Например, нахождение корня, возведение в степень, sin(), cos()

 
Работа с файлами в С++.

Работа с файлами в С++.

Файл – именованный набор байтов, который может быть сохранен на некотором накопителе. Файл имеет уникальное имя, например файл.txt. Для работы с файлами в С++ необходимо

 
Структуры в C++.

Структуры в C++.

Структура – это совокупность переменных, объединенных одним именем, предоставляющая общепринятый способ совместного хранения информации. Объявление структуры приводит к образованию шаблона, используемого для создания объектов структуры.

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: