Answers:
向量的数学定义是集合的成员,集合S
n
是特定集合(S
)中值的有序序列。这是C ++ vector
存储的内容。
std::vector
不提供,3.该参数std::vector
是值的有序序列可以适用于std::list
,std::deque
,std::basic_string
,等
之所以称为向量,是因为标准模板库的设计师Alex Stepanov一直在寻找一个名称来将其与内置数组区分开。他现在承认自己犯了一个错误,因为数学已经将术语“向量”用于固定长度的数字序列。C ++ 11通过引入行为类似于数学向量的“数组”类来解决此错误。
亚历克斯的课程:每次命名时都要非常小心。
Bjarne Stroustrup的The C ++ Programming Language摘录:
“有人可能会说valarray 应该被称为向量, 因为它是传统的数学向量,而该向量 应该被称为array。但是,这不是术语演变的方式。”
只是说为什么它可能不被称为array
:因为std::vector
具有动态大小。数组在概念上是固定长度的。顺便说一下,下一个C ++ Standard具有一个std::array
模板,该模板的大小是固定的,与纯数组相比应是首选的:
std::array<int, 4> f = { 1, 2, 3, 4 };
std::array
将是不好的。
为了补充@MarkRuzon的出色响应:
亚历克斯说,给现在称为std :: vector的名称起个名字,他观察到Scheme和Common Lisp为相似的数据结构赋予的名称。
后来他承认自己错了,因为C ++向量与数学中的向量无关。
他还说,他将一个由50个人组成的社区的错误引入到500万人的社区中,因此该错误可能永远存在。
这只是名字。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 ++功能),因此可以将其称为向量,但这只是口语化,例如Vallaray
Bjarne Stroustrup在“ C ++编程语言”中指出的直接支持其中的一些功能。
std::vector
不支持算术运算,因此对于a,所有这些属性都未定义std::vector
。因此a std::vector
不符合向量的条件。我会打电话给它,dynamic_array
或者resizable_array
告诉您它是什么。
同样,如果使它存储整数或浮点数,则它确实是存储N维向量的出色类型。毕竟,所有向量都是按特定顺序保留的数字列表。
0.1
,在数学中,此值是实数集的成员。在Java编程语言(docs.oracle.com/javase/7/docs/api/java/util/Vector.html)中,向量是“ Vector类实现对象的可增长数组。像数组一样,它包含的组件可以使用整数索引进行访问。但是,Vector的大小可以根据需要增加或缩小,以适应在Vector创建后添加和删除项目。”
我猜它来自术语“ 行向量”。而且,计算机科学家喜欢为事物起个新名字。
将C ++向量视为动态数组,可以通过插入或删除元素来更改其大小。它们与向量的数学定义无关。
数学中的向量
考虑一个nxm
名为的矩阵A
,其中n
对应于行数,并且m
对应于列数。在数学上下文中,一旦引入了这样的矩阵,则以后,您将无法执行超出A
范围的任何操作,也无法扩展A
的大小。这意味着您不能引用[n + 1]
and / or 的索引[m + 1]
。
现在,向量A
也会推导这些属性,而它们的尺寸将始终为1xm
([i]
在中选择的任何行A
)或nx1
([j]
在中选择的任何列A
)。也不能将向量指定为2xn
,因为向量的集合不能解释为一个向量,而一个向量-使其为维的[i]
列向量-可以解释为矩阵。A
1xm
重要的一点是,一旦按数学引入矢量,就无法更改其尺寸。
C ++中的向量
在C ++中,向量就像数学中的向量一样,但是与数学中的向量不同,它们的大小可以更改。大小在这里适用,因为它暗示一个特定向量包含的元素数。
当您有向量的向量时,可以使用术语“维度”来表示C ++向量std::vector<std::vector<T>>> ragged_array
。在此示例中,我称该向量为“参差不齐”,因为它演示了如何可以独立更改该向量的每个向量的大小。一旦将特定向量引入数学中,它不仅违反了如何更改尺寸的规则,而且还证明了如何不能将其用作矩阵。