代码之家  ›  专栏  ›  技术社区  ›  Redwood

向量是什么?它们是如何用于编程的?

  •  36
  • Redwood  · 技术社区  · 17 年前

    我熟悉向量的数学/物理概念作为一个大小和一个方向,但是我也不断地在编程的上下文中遇到向量的引用(例如C++似乎有一个STL::向量库,它经常出现在这样的情况下)。

    根据上下文,我的直觉是,它们是一个相当原始的结构,最常用于沿可变长度数组的线表示某些内容(我推测,将其大小存储为大小),但如果有人能向我提供一个更完整的解释,最好包括它们是如何使用的以及为什么使用它们,那将是非常有帮助的。D在实践中。

    11 回复  |  直到 7 年前
        1
  •  39
  •   Adam Davis    17 年前

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

    向量容器实现为 动态数组;和普通数组一样 数组、向量容器 存储在连续存储器中的元素 位置,这意味着 不仅可以访问元素 使用迭代器,但也使用偏移量 在元素的常规指针上。

    但与常规阵列不同,存储在 自动处理向量, 允许它被扩展和 根据需要签订合同。

    此外,向量通常可以保存任何对象,因此您可以创建一个类来保存有关车辆的信息,然后将车队存储在向量中。

    除了调整大小外,向量还有一个好处,那就是它仍然允许通过索引以恒定的时间访问单个元素,就像数组一样。

    调整大小的权衡是,当您达到当前容量时,它必须重新分配,有时还要复制到更多的内存。但是,大多数容量增加算法每次遇到障碍时容量都会增加一倍,因此您遇到的容量不会超过log2(可用堆),而在整个程序操作过程中,最坏的情况下可能会出现十几次。

    -亚当

        2
  •  19
  •   Greg Hewgill    17 年前

    在数学中,矢量可以看作是方向和大小的组合。然而,它也可以被认为是一个坐标。例如,距离水平面约37度的5级矢量表示二维平面上的一个点。这一点也可以用笛卡尔坐标对(3,4)表示。这对(3,4)也是一个数学矢量。

    在编程中,这个名称“vector”最初用于描述任何固定长度的标量序列。长度为2的向量表示二维平面中的点,长度为3的向量表示三维空间中的点,依此类推。长度为100的向量表示100维空间中的一个点(数学家不难想到这类事情)。

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

        3
  •  7
  •   duffymo    17 年前

    你习惯的数学向量 tensors of rank one 计算机科学中的数据结构不一定遵循张量变换规则。正如前面提到的,它们只是可以扩展和收缩的数组。

        4
  •  4
  •   Greg Hewgill    17 年前

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

    但与常规阵列不同,矢量中的存储是自动处理的,可以根据需要进行扩展和收缩。

    向量擅长:

    • 通过位置索引访问单个元素(常量时间)。
    • 以任意顺序(线性时间)迭代元素。
    • 从其末尾添加和删除元素(固定的摊余时间)。

    REF

        5
  •  2
  •   Adrian Grigore    17 年前

    因为其他答案中至少有两个是从 this site ,您可能还需要阅读其中的其余描述…-)

        6
  •  2
  •   rmeador    17 年前

    我能从你的名字中理解你的困惑(我以前也被它弄糊涂了)。在三维图形编程中,矢量的概念并没有起到帮助作用,这更接近于数学定义。在数学中,向量可以看作是任意长度的一维矩阵(长度是坐标系的维数)。在大多数OO语言中,向量基本上是一维矩阵(数组),因此得名。它们与坐标无关,除非程序员决定将它们用于该任务(这很少见——我从未见过)。他们通常也没有任何数学算符来做矩阵乘法或任何类似的运算。所以它们的一维本质就是相似性的终点。我将把它留给其他答案来解释OO容器的特性和用途,它们已经有了一个句柄。

        7
  •  2
  •   Nemanja Trifunovic    17 年前

    SICP book :

    为了模拟计算机内存,我们使用了一种新的数据结构,称为矢量。抽象地说,向量是一个复合数据对象,它的单个元素可以在独立于索引的时间内通过整数索引访问。

        8
  •  0
  •   isomorphismes Marcin    10 年前

    https://isocpp.org/wiki/faq/containers 有很多你需要了解的信息围绕着这个问题。它将向量与链表、数组等进行对比。

    另外,从斯特劳斯特鲁普 旅游 ( http://www.stroustrup.com/Tour.html 第9章:

    大多数计算都涉及到创建值集合。一个以存放对象为主要目的的类称为 容器 . 最有用的 stl 集装箱是 vector . 一 stl::vector 是给定类型的元素序列。这些元素连续存储在内存中。

    所以stl向量是一组值 同类型的 ___ 主要问题是如何存储元素 .

        9
  •  0
  •   Azure    8 年前

    除了C++中的数据结构外,向量也是指针指向代码的一个术语。中断向量指向要调用的中断代码。

        10
  •  0
  •   Ezra Justin Lee    8 年前

    为了帮助您记住单词__vector__的cs含义,可以参考拉丁词根vehere,这意味着传递或携带。因此,向量通常携带或包含事物。

        11
  •  0
  •   Budhathoki Bijaya    7 年前

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

    推荐文章