为什么一个C ++向量被称为向量?

这个问题真的很明显。 我隐约地了解math中的向量,但是我并没有真正看到与C ++向量的链接。

vector的math定义是集合S n一个成员,它是特定集合( S )中的一个有序的值序列。 这是C ++ vector存储的内容。

它被称为vector,因为标准模板库的devise者Alex Stepanov正在寻找一个名称来区分它与内置数组。 他现在承认,他犯了一个错误,因为math已经使用“vector”一词来定义一个数字序列。 现在C ++ 0X会通过引入一个类似于math向量的类“数组”来复合这个错误。

亚历克斯的教训是:每当你说出一些东西时,要非常小心。

摘自Bjarne Stroustrup 的C ++编程语言

“有人可能会说valarray应该被称为vector,因为它是一个传统的mathvector,这个vector应该被称为数组 ,但是,这不是术语演变的方式。

名字来自线性代数,其中向量是只有一列或只有一行的matrix。

只是说为什么它可能不是所谓的array :因为std::vector有一个dynamic的大小。 一个数组在概念上是固定的。 接下来的C ++标准方式有一个std::array模板,它的大小是固定的,应该优先于一个普通的数组:

 std::array<int, 4> f = { 1, 2, 3, 4 }; 

此外,如果你使它存储整数或浮点,它确实是一个很好的types来存储N维向量。 毕竟,所有的vector是一个数字列表保持在一个特定的顺序。

这只是名字。 C ++ 向量可以很好(或者甚至更准确)被称为dynamic数组可resize的数组,但只是简单地select了这个名称。 这个向量与来自math的向量不一样,因为在math中,向量是任何集合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中乘法标识

标量乘与vector相加的分配性

a(u + v)= au + av

标量乘法关于场加法的分配性

(a + b)v = av + bv


C ++ std::vector支持所有这些(不是直接的,而是通过C ++的特性),所以它可以以某种方式被称为向量,但这只是俗语,例如Bjarne Stroustrup在“C ++编程语言”中指出的Vallaray支持一些的直接。

一个向量就是一系列的值,都是相同的types。 这与math中的使用非常相符。 我认为,向量应该支持一些常见操作(比如添加和标量缩放)的math思想并没有被结转,重要的方面主要是结构。

为了补充@MarkRuzon的出色响应:

亚历克斯说,给现在称为std :: vector的名字,他观察了Scheme和Common Lisp给类似数据结构的名字。

后来他承认自己错了,因为C ++向量与math向量无关。

他还说,他向500万人的社区介绍了一个50人的社区的错误,所以错误可能永远存在。

我猜想它来自术语行向量 。 此外,计算机科学家喜欢为事物想出新的名字…

很久以前,在B语言中有vectortypes。 然后C语言把它们称为“数组”。 然后C与类和C + +语言刚刚派生它…

这当然不是整个故事。 如上所述,斯捷潘诺夫做出了实际的决定。 但是如果在C中仍然使用“vector”,结果可能看起来完全不同。

PS。 我想知道为什么C重命名“数组”。 究竟是什么原因?

PS2。 国际海事组织作为一种语言作为C ++,数组是更好的意思是“一个types保存元素通过运算符[]”(即不是42 [some_array_object])合理访问,例如std :: map实例化为“关联数组”。

不知道真正的原因,但C ++将其称为向量而不是数组,可以减lessC和C ++结构之间的混淆,尽pipe它们履行相同的angular色。

奇怪的types参数化名称..

在这里一个列爆炸..(一些服务器端ASP.NET HTML编码技能的查看源代码)

还是一排?

然后,再想一想,在MIMD甚至SSEvector机上下文中,这个名字听起来还真不错。

但math向量不是dynamic的,我从来没有看到从2D到3D或其他任何变化,如果有什么传统的arrays使更好的向量。

它来自于vector构build的matrix结构