Mar*_*zon 171
它被称为向量,因为标准模板库的设计者Alex Stepanov正在寻找一个名称来区分它与内置数组.他现在承认自己犯了一个错误,因为数学已经将术语"向量"用于固定长度的数字序列.现在,C++ 0X将通过引入一个类似于数学向量的类"数组"来复合这个错误.
亚历克斯的教训:每当你说出一些东西时都要非常小心.
Meh*_*ari 104
向量的数学定义是集合的成员,集合Sn是特定集合(S)中的有序值序列.这就是C++ vector存储的内容.
aib*_*aib 52
Bjarne Stroustrup 的C++编程语言摘录:
"有人可能认为valarray 应该被称为向量, 因为它是一个传统的数学向量,并且该向量 应该被称为数组.但是,这不是术语演变的方式."
Joh*_*itb 10
只是说为什么它可能没有被调用array:因为std::vector有一个动态的大小.从概念上讲,数组的长度是固定的.顺便说一下,下一个C++标准有一个std::array模板,它的大小是固定的,应该优先于普通数组:
std::array<int, 4> f = { 1, 2, 3, 4 };
Run Code Online (Sandbox Code Playgroud)
为了补充@MarkRuzon的出色响应:
亚历克斯说,为了给现在称为std :: vector的名字,他观察了Scheme和Common Lisp赋予类似数据结构的名称.
后来他承认自己错了,因为C++向量与数学中的向量无关.
他还说,他向一个拥有500万人口的社区引入了一个由50人组成的社区的错误,因此错误可能会永远存在.
这只是名字。C++向量可以很好地(或者甚至更准确)称为动态数组或可调整大小的数组,但只是简单地选择了这个名称。这个向量与数学中的向量不同,因为在数学中,向量是任何集合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) = 0
标量乘法与域乘法的兼容性
a(bv) = (ab)v
标量乘法的单位元
1个V = V,其中1表示乘法单位中˚F。
标量乘法相对于向量加法的分布性??
a(u + v) = au + av
标量乘法相对于域加法的分布
(a + b)v = av + bv
C++std::vector支持所有这些(不是直接,而是通过 C++ 特性),因此它可以以某种方式称为向量,但这只是口语化,例如VallarayBjarne Stroustrup 在“C++ 编程语言”中指出的直接支持其中一些。