Подтвердить что ты не робот

Что такое векторы и как они используются в программировании?

Я знаком с математической/физической концепцией вектора как величины и направления, но я также продолжаю называть ссылки на векторы в контексте программирования (например, С++, похоже, имеет библиотеку stl:: vector который довольно часто появляется на SO).

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

4b9b3361

Ответ 1

От http://www.cplusplus.com/reference/stl/vector/

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

Но в отличие от обычных массивов, хранение в векторы обрабатываются автоматически, позволяя ему расширяться и при необходимости сокращается.

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

Хорошие вещи о векторах, помимо изменения размера, заключаются в том, что они по-прежнему позволяют постоянному доступу к отдельным элементам через индекс, как и массив.

Компромисс для изменения размера - это то, что когда вы нажимаете текущую емкость, он должен перераспределять, а иногда и копировать, больше памяти. Однако большинство алгоритмов увеличения мощности удваивают емкость каждый раз, когда вы попадаете в барьер, поэтому вы никогда не попадаете в нее больше, чем log2 (имеется куча), которая в десятки раз оказывается в худшем случае во время работы программы.

-Adam

Ответ 2

В математике вектор можно рассматривать как комбинацию направления и величины. Однако его можно также рассматривать как координату. Например, вектор с магнитудой 5 и углом около 37 градусов от горизонтали представляет собой точку на двумерной плоскости. Эта точка также может быть представлена ​​декартовой координатной парой (3, 4). Эта пара (3, 4) также является математическим вектором.

В программировании это имя "вектор" первоначально использовалось для описания последовательности фиксированных длин скалярных чисел. Вектор длины 2 представляет собой точку в 2D-плоскости, вектор длины 3 представляет собой точку в трехмерном пространстве и т.д. Вектор длины 100 представляет собой точку в 100-мерном пространстве (математикам нетрудно думать о таких вещах).

В современных библиотеках программирования это имя "вектор" стало означать переменную размерность (не обязательно числа). Изменение размера (длины или размерности) математического вектора - это не то, что вы обычно делаете, если не выполняете какую-либо операцию проекции. Но изменение длины вектора программирования, содержащего последовательность строк, может быть общей операцией.

Ответ 3

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

Ответ 4

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

Но в отличие от обычных массивов, хранение в векторах обрабатывается автоматически, что позволяет ему расширяться и сокращаться по мере необходимости.

Векторы хороши при:

  • Доступ к отдельным элементам по индексу позиции (постоянное время).
  • Итерация по элементам в любом порядке (линейное время).
  • Добавить и удалить элементы со своего конца (время с постоянной амортизацией).

REF

Ответ 5

Поскольку по крайней мере два других ответа вставляются из этого сайта, вы также можете прочитать остальную часть описания...: -)

Ответ 6

Я могу понять ваше замешательство в именах (я тоже был смущен этим). Этому не помогла идея Vector в 3D-графическом программировании, которая ближе к математическому определению. В математике Вектор можно рассматривать как одномерную матрицу произвольной длины (с длиной, являющейся числом измерений вашей системы координат). В большинстве языков OO векторы представляют собой, по существу, одномерные матрицы (массивы), отсюда и название. Они не имеют ничего общего с координатами, если программист не решит использовать их для выполнения этой задачи (что редко - я его никогда не видел). У них также обычно нет математических операторов для выполнения матричного умножения или любых подобных операций. Таким образом, одномерность их заключается в том, где заканчивается сходство. Я оставлю его на других ответах, чтобы объяснить особенности и использование контейнера OO, на которые у них уже есть дескриптор.

Ответ 7

Из SICP book:

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

Ответ 8

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

Ответ 9

https://isocpp.org/wiki/faq/containers содержит много информации, необходимой для понимания того, что окружает этот вопрос. Он будет контрастировать векторы со связанными списками, массивами и т.д.

Кроме того, из Stroustrup Tour (http://www.stroustrup.com/Tour.html), глава 9:

Большинство вычислений включает создание наборов значений.... Класс с основной целью хранения объектов... называется контейнером.... Наиболее полезным контейнером stl является vector. A stl::vector - последовательность элементов данного типа. Элементы сохраняются смежно в памяти.

Итак, вектор STL представляет собой набор значений одного и того же типа - таким образом, он похож на математический смысл vector/module-but , основная проблема заключается в том, как хранятся элементы.

Ответ 10

Помимо структуры данных в С++, вектор также является термином для указателя на код. F.E. вектор прерывания указывает на код прерывания, который должен быть вызван.

Ответ 11

Чтобы помочь вам запомнить значение CS слова "вектор", может быть полезно обратиться к латинской корневой веревке, что означает передачу или перенос. Таким образом, вектор переносит или содержит вещи, вообще говоря.