什么是向量以及它们如何在编程中使用?

时间:2009-02-03 18:44:06

标签: computer-science vector

我熟悉矢量的数学/物理概念作为幅度和方向,但我也经常在编程环境中遇到向量的引用(例如C ++似乎有一个stl :: vector库它经常出现在SO)上。

我从上下文的直觉是,它们是一个相当原始的构造,最常用于表示可变长度数组的行(按照我认为的大小存储它的大小),但它会非常有用如果有人能给我一个更完整的解释,最好包括他们在实践中如何以及为何使用。

11 个答案:

答案 0 :(得分:39)

来自http://www.cplusplus.com/reference/stl/vector/

  

Vector容器实现为   动态数组;和常规一样   数组,矢量容器有它们的   存储在连续存储中的元素   地点,这意味着他们的   元素不仅可以访问   使用迭代器但也使用偏移量   关于元素的常规指针。

     

但与普通数组不同,存储在   向量是自动处理的,   允许它扩展和   根据需要签订合同。

此外,矢量通常可以容纳任何物体 - 因此您可以创建一个类来保存有关车辆的信息,然后将该舰队存储在矢量中。

除了调整大小之外,向量的好处在于它们仍然允许通过索引在不变的时间内访问单个元素,就像数组一样。

调整大小的权衡是,当你达到当前容量时,它必须重新分配,有时复制到更多内存。然而,大多数容量增加算法每次碰到障碍时都会使容量增加一倍,所以你永远不会超过log2(堆可用),在整个程序运行的最坏情况下,这可能是十几次。

- 亚当

答案 1 :(得分:19)

在数学中,矢量可以被认为是方向和幅度的组合。但是,它也可以被认为是一个坐标。例如,幅度为5且与水平面成约37度角的矢量表示2D平面上的点。这一点也可以用笛卡尔坐标对(3,4)表示。这对(3,4)也是一个数学向量。

在编程中,这个名称“vector”最初用于描述任何固定长度的标量数字序列。长度为2的矢量表示2D平面中的点,长度为3的矢量表示3D空间中的点,依此类推。长度为100的向量表示100维空间中的一个点(数学家可以毫不费力地思考这些事物)。

在现代编程库中,这个名称“vector”通常意味着一个变量大小的值序列(不一定是数字)。除非您正在进行某种投影操作,否则更改数学矢量的大小(长度或维数)并不是您通常会做的事情。但是改变包含字符串序列的编程向量的长度可能是一种常见的操作。

答案 2 :(得分:7)

你习惯的数学向量是tensors of rank one;计算机科学中的数据结构不一定遵守张量转换规则。如前所述,它们只是可以扩展和收缩的阵列。

答案 3 :(得分:4)

Vector容器实现为动态数组;与常规数组一样,向量容器将其元素存储在连续的存储位置,这意味着它们的元素不仅可以使用迭代器访问,还可以使用常规指向元素的偏移量来访问。

但与常规数组不同,矢量中的存储是自动处理的,允许根据需要进行扩展和收缩。

矢量擅长:

  • 按位置索引(恒定时间)访问各个元素。
  • 以任意顺序(线性时间)迭代元素。
  • 从结尾添加和删除元素(常量摊销时间)。

REF

答案 4 :(得分:2)

由于至少有两个其他答案是从this site粘贴的,您可能还想阅读其余的说明......: - )

答案 5 :(得分:2)

我可以从名字中理解你的混淆(我过去常常对此感到困惑)。 3D图形编程中的Vector的概念没有帮助,它更接近数学定义。在数学中,Vector可以被认为是任意长度的一维矩阵(长度是坐标系的维数)。在大多数OO语言中,向量基本上是一维矩阵(数组),因此是名称。它们与坐标没有任何关系,除非程序员决定将它们用于该任务(这是罕见的 - 我从未见过它)。它们通常也没有任何数学运算符来进行矩阵乘法或任何类似的运算。因此,它们的一维性质是关于相似性结束的地方。我将把它留给其他答案来解释他们已经掌握的OO容器的功能和用途。

答案 6 :(得分:2)

来自SICP book

  

为了模拟计算机内存,我们使用一种称为向量的新数据结构。抽象地说,vector是一个复合数据对象,它的各个元素可以通过一个整数索引访问,其时间长度与索引无关。

答案 7 :(得分:0)

https://isocpp.org/wiki/faq/containers有很多信息可以帮助您理解围绕这个问题的内容。它会将矢量与链接列表,数组等进行对比。

另外,来自Stroustrup的 Tour http://www.stroustrup.com/Tour.html),第9章:

  

大多数计算都涉及创建价值集......主要用于保存对象的类是......称为容器。 ...最有用的stl容器是vectorstl::vector是给定类型的元素序列。元素连续存储在内存中。

所以STL向量是相同类型的值的集合 - 这样就像向量/模块的数学意义 - 但主要问题是元素的存储方式< /强>

答案 8 :(得分:0)

编程中的向量基本上是动态数组,其中存储被自动处理,允许它根据需要进行扩展和收缩。最好的是它们还允许通过索引在单个元素的恒定时间内访问,就像常规数组一样

答案 9 :(得分:0)

除了C ++中的数据结构外,向量也是指向代码的指针。 F.E.中断向量指向要调用的中断代码。

答案 10 :(得分:0)

为了帮助您记住单词“vector”的CS含义,参考拉丁语root vehere可能会有所帮助,这意味着传达或携带。因此,一般来说,载体携带或包含东西。