На самом деле вопрос довольно понятен. Я смутно знаю о векторах в математике, но на самом деле я не вижу ссылку на векторы С++.
Почему вектор С++ называется вектором?
Ответ 1
Математическое определение вектора является членом множества S
n
которое является упорядоченной последовательностью значений в определенном наборе (S
). Это то, что хранит С++ vector
.
Ответ 2
Он назвал вектор, потому что Алекс Степанов, разработчик стандартной библиотеки шаблонов, искал имя, чтобы отличить его от встроенных массивов. Он признает теперь, что ошибся, потому что математика уже использует термин "вектор" для последовательности чисел с фиксированной длиной. Теперь С++ 0X усугубит эту ошибку, введя класс 'array', который будет вести себя аналогично математическому вектору.
Урок Алекс: будьте очень осторожны каждый раз, когда вы что-то называете.
Ответ 3
Отрывок из языка программирования С++ от Bjarne Stroustrup:
"Можно было бы утверждать, что валяра следовало бы назвать векторным потому что это традиционный математический вектор и этот вектор следует назвать массивом. Однако это не так, как терминология развилась".
Ответ 4
Название происходит от линейной алгебры, где vector - матрица с одним столбцом или только с одной строкой.
Ответ 5
Просто сказать, почему он, вероятно, не называется array
: Поскольку std::vector
имеет динамический размер. Массив концептуально фиксирован по длине. Следующий стандарт С++, кстати, имеет шаблон std::array
, который фиксирован по размеру и должен быть предпочтительнее простого массива:
std::array<int, 4> f = { 1, 2, 3, 4 };
Ответ 6
Также, если вы делаете его целыми или плавающими точками, он делает отличный тип для хранения N-мерных векторов. Ведь весь вектор есть, это список чисел, хранящихся в определенном порядке.
Ответ 7
Это просто имя. С++ вектор может быть очень хорошо (или, может быть, даже более точным) называться динамическим массивом или изменяемым размером, но это имя было просто выбрано. Этот вектор не совпадает с вектором из математики, потому что в векторах математики есть члены любого набора V, так что в этом наборе определены две важные операции: + (добавление векторов) и x (умножение вектора на скаляр из поля F), и эти операции удовлетворяют 8 аксиомам
Ассоциативность добавления
u + (v + w) = (u + v) + w
Коммутативность добавления
u + v = v + u
Идентификационный элемент добавления
Существует элемент 0 ∈ V, называемый нулевым вектором, такой, что v + 0 = v для всех v ∈ V.
Обратные элементы сложения
Для каждого v ∈ V существует элемент -v ∈ V, называемый аддитивной инверсией v, такой, что v + (-v) = 0
Совместимость скалярного умножения с умножением поля
a (bv) = (ab) v
Элемент идентификатора скалярного умножения
1 v = v, где 1 обозначает мультипликативное тождество в F.
Распределительность скалярного умножения относительно векторного сложения
a (u + v) = au + av
Распределительность скалярного умножения относительно сложения поля
(a + b) v = av + bv
С++ std::vector
поддерживает все из них (не напрямую, а через функции С++), поэтому его можно каким-то образом называть вектором, но это просто коллоквиализм и, например, Vallaray
, обозначенный Bjarne Stroustrup в "Программе на С++" Язык "поддерживает некоторые из них напрямую.
Ответ 8
Вектор - это просто последовательность значений, все одного типа. Это в значительной степени соответствует использованию в математике. Я предполагаю, что математическая идея о том, что векторы должны поддерживать некоторые общие операции (такие как добавление и масштабирование скаляром), не переносятся, важным аспектом является в основном структура.
Ответ 9
В дополнение к отличному отклику от @MarkRuzon:
Алекс сказал, что, чтобы дать имя тому, что теперь называется std::vector, он заметил имя, которое Scheme и Общие Lisp предоставили аналогичные структуры данных.
Позже он признает, что был не прав, потому что С++ вектор не имеет ничего общего с векторами в математике.
Он также говорит, что он ввел ошибку сообщества из 50 человек в сообщество из 5 миллионов человек, поэтому ошибка, вероятно, останется навсегда.
Ответ 10
Давным-давно в языке B существуют типы векторов. Тогда язык C назвал их "массивами". Тогда C с классами и языком С++ просто вывел его...
Это, конечно, не вся история. Как упоминалось выше, Степанов принял фактическое решение. Но если "вектор" все еще использовался в C, результат может выглядеть совсем по-другому.
PS. Интересно, почему C переименовывает "массив". Какова была точная причина?
PS2. ИМО для языка как С++, массив лучше означает "элементы удержания типа, которые можно получить с помощью оператора []" (т.е. Не 42 [some_array_object]), например. экземпляр std:: map как "ассоциативный массив".
Ответ 11
Я предполагаю, что это исходит из термина вектор строки. Кроме того, компьютерные ученые любят придумывать новые имена для вещей...
Ответ 12
Не знаю реальной причины, но С++ называет ее вектором вместо массива, уменьшает путаницу между структурами C и С++, хотя они выполняют одни и те же роли.
Ответ 13
Чудеса, связанные с параметризацией по типам.
здесь колонка получает blasted.. (просмотреть исходный код для некоторых серверных ASP.NET навыков кодирования HTML)
или это была строка?
И снова, думая об этом в MIMD или даже в контексте векторной машины SSE, имя по-прежнему звучит чертовски хорошо.
Ответ 14
но математические векторы не являются динамическими, я никогда не видел одно изменение от 2D до 3D или чего-либо еще, если что-то из традиционных массивов делает для лучших векторов.
Ответ 15
он исходит из структуры матрицы, которая строится из векторов