Что такое вектор в C++?

Что такое вектор в C++ Программирование и разработка

Вектор C ++ — это класс шаблона в стандартной библиотеке шаблонов (STL), который функционирует как более совершенный массив. В отличие от массивов, векторы могут автоматически изменять размер при вставке или удалении элементов, поэтому их удобно использовать при работе с постоянно изменяющимися данными. Использование векторов в вашей программе на C ++ позволяет вам хранить данные с большей гибкостью и эффективностью. Сегодня мы углубимся в векторы C ++ и обсудим преимущества, функции и инициализацию.

Что std::vectorв C ++?

Векторы C ++ (также известные как std::vector) представляют собой контейнеры последовательностей, которые представляют собой массивы, размер которых может изменяться. Они используются для работы с динамическими данными и используют непрерывные места хранения для своих элементов. Вы можете эффективно получить доступ к элементам, используя смещения обычных указателей. Внутренне векторы C ++ используют динамически выделяемые массивы для хранения своих элементов. Для массива может потребоваться перераспределение, чтобы он мог увеличиваться в размере при вставке новых элементов.

Векторные контейнеры могут выделять дополнительное пространство для хранения, чтобы приспособиться к потенциальному росту, поэтому контейнер может иметь большую емкость, чем то, что на самом деле хранится внутри него. Вы можете использовать библиотеки для применения различных стратегий роста, чтобы найти баланс между перераспределением и использованием памяти, но перераспределение должно происходить только с логарифмически увеличивающимися интервалами размера. Это позволяет использовать амортизированную постоянную временную сложность при вставке отдельных элементов в конец вектора.

Поскольку векторы C ++ выполняют автоматическое перераспределение, они могут эффективно управлять хранилищем и динамически расти. Хотя они потребляют больше памяти, чем массивы, их эффективность и гибкость делают использование векторов целесообразным.

Давайте обсудим еще несколько преимуществ C ++ vector:

  • Максимального размера нет, что полезно, если вы заранее не знаете, насколько велики будут ваши данные.
  • Их возможности изменения размера упрощают работу с динамическими элементами.
  • Поскольку вектор C ++ — это шаблонный класс, вам не нужно вводить один и тот же код для обработки разных данных.
  • Когда используется общий объем памяти, происходит автоматическое перераспределение.
  • Вы можете легко копировать и назначать другие векторы
Читайте также:  Функция Perror в C

Векторные функции C++

Есть много общедоступных функций-членов, связанных с векторами C ++. Давайте посмотрим на некоторые функции и то, что они делают.

cbegin: возвращает const_iteratorуказатель на первый элемент в контейнере

Примечание. A const_iterator- это итератор, указывающий на содержимое const. Его можно увеличивать и уменьшать, как и iteratorвозвращаемый функцией vector::begin, но его нельзя использовать для изменения содержимого, на которое он указывает.

  • cend: возвращает const_iteratorуказатель на последний элемент в контейнере
  • crbegin: возвращает const_reverse_iteratorуказатель на последний элемент в контейнере
  • crend: возвращает const_reverse_iteratorуказатель на теоретический элемент, предшествующий первому элементу в контейнере
  • emplace_back: вставляет новый элемент в конец вектора сразу после текущего последнего элемента
  • max_size: возвращает максимальный размер
  • pop_back: удаляет последний элемент в векторе
  • push_back: добавляет новый элемент в конец вектора
  • rbegin: возвращает обратный итератор, указывающий на последний элемент в векторе

Примечание. Обратные итераторы выполняют итерацию в обратном направлении. Увеличение обратного итератора перемещает его к началу контейнера.

  • rend: возвращает обратный итератор, указывающий на теоретический элемент, предшествующий первому элементу в векторе
  • shrink_to_fit: запрашивает контейнер, чтобы уменьшить его емкость, чтобы соответствовать его размеру
  • std::vector::end: возвращает итератор, относящийся к последнему элементу в векторном контейнере
  • vector::capacity: возвращает размер дискового пространства, выделенного в данный момент для вектора.
  • vector::front: возвращает ссылку на первый элемент вектора
  • vector::back: возвращает последний элемент вектора
  • vector::size: возвращает количество элементов в векторе

Примечание. Возвращает количество фактических объектов, содержащихся в векторе, которое не обязательно равно его емкости хранения.

  • vector::begin: возвращает итератор, указывающий на первый элемент вектора

Как инициализировать вектор C ++

Теперь, когда мы знаем больше об основах и некоторых функциях векторов C ++, давайте обсудим методы инициализации.

Есть четыре способа инициализировать вектор в C ++ :

Использование массива

Этот метод передает массив конструктору векторного класса. Переданный массив содержит элементы, которые будут заполнять вектор.

#include <iostream>
#include <vector>
using namespace std;
int main() {
  vector<int> vec{1,2,3,4,5};
  for (int i = 0; i < vec.size(); i++)
  {
    cout << vec[i] << » «;
  }
  return 0;
}

Перемещение значений по одному

Все элементы, которые должны заполнить вектор, могут быть по одному помещены в вектор с помощью метода класса вектора push_back.

#include <iostream>
#include <vector>
using namespace std;
int main() {
  vector<int> vec;
  vec.push_back(1);
  vec.push_back(2);
  vec.push_back(3);
  vec.push_back(4);
  vec.push_back(5);
  for (int i = 0; i < vec.size(); i++)
  {
    cout << vec[i] << » «;
  }
  return 0;
}

Использование перегруженного конструктора векторного класса

Этот метод в основном используется, когда вектор необходимо заполнить несколькими элементами одного и того же значения (например, если вектор необходимо заполнить десятью единицами).

#include <iostream>
#include <vector>
using namespace std;
int main() {
  int num_of_ele = 10;
  // the overloaded constructor takes the number of
  // values and the value itself as parameters.
  vector<int> vec(num_of_ele, 1);
  for (int i = 0; i < vec.size(); i++)
  {
    cout << vec[i] << » «;
  }
  return 0;
}

Использование уже инициализированного вектора

Этот метод проходит begin()и end()итераторы из уже инициализированного вектора к вектору конструктору класса. Новый вектор инициализируется и заполняется элементами старого вектора.

#include <iostream>
#include <vector>
using namespace std;
int main() {
  vector<int> vec_1{1,2,3,4,5};
  vector<int> vec_2(vec_1.begin(), vec_1.end());
  for (int i = 0; i < vec_2.size(); i++)
  {
    cout << vec_2[i] << » «;
  }
  return 0;
}

Что изучать дальше

Использование векторов C ++ в вашей программе позволит вам хранить данные с большей гибкостью и эффективностью. Это идеальный инструмент для работы с постоянно меняющимися данными. Теперь, когда вы знаете больше о векторах, вы готовы перейти к большему количеству концепций C ++.

Вот некоторые рекомендуемые концепции для обсуждения:

  • Шаблоны C ++
  • Параллелизм с современным C ++
  • Встроенное программирование на C ++
  • И т.п.
Оцените статью
bestprogrammer.ru
Добавить комментарий