什么是矢量数据结构 我知道C++和java中的向量,就像动态数组,但是我找不到矢量数据结构的一般定义。那么什么是向量?Vector是一种通用数据结构(如array、stack、queue、tree等)还是一种取决于语言的数据类型?

什么是矢量数据结构 我知道C++和java中的向量,就像动态数组,但是我找不到矢量数据结构的一般定义。那么什么是向量?Vector是一种通用数据结构(如array、stack、queue、tree等)还是一种取决于语言的数据类型?,vector,data-structures,abstract-data-type,Vector,Data Structures,Abstract Data Type,它是一个具有动态分配空间的数组,每次超出此空间时,都会分配内存中的新位置,并将旧数组复制到新位置。那个么老的就被释放了 此外,vector通常分配的内存比它需要的要多,所以当添加新元素时,它不必复制所有数据 看起来,这样的列表要好得多,但事实并非如此。如果不经常更改向量(就大小而言),那么计算机的缓存内存使用向量比使用列表更好,因为它们在内存空间中是连续的。缺点是当向量较大时,需要展开。然后,您必须同意将大量数据复制到内存中的另一个空间 更重要的是。可以将新数据添加到向量的末尾和前端。因为向量类

它是一个具有动态分配空间的数组,每次超出此空间时,都会分配内存中的新位置,并将旧数组复制到新位置。那个么老的就被释放了

此外,vector通常分配的内存比它需要的要多,所以当添加新元素时,它不必复制所有数据

看起来,这样的列表要好得多,但事实并非如此。如果不经常更改向量(就大小而言),那么计算机的缓存内存使用向量比使用列表更好,因为它们在内存空间中是连续的。缺点是当向量较大时,需要展开。然后,您必须同意将大量数据复制到内存中的另一个空间

更重要的是。可以将新数据添加到向量的末尾和前端。因为向量类似于数组,所以每次要将元素添加到向量的开头时,都必须复制所有数组。在向量的末尾添加元素要有效得多。链表没有这样的问题

Vector可以随机访问其内部保存的数据,而列表、队列和堆栈则不行。

应用于计算机科学/编程的“Vector”一词是从数学中借用来的,这会使使用变得混乱(甚至你的问题可能涉及多个主题)

数学中最简单的向量示例是数线,用于教授初等数学(尤其是帮助可视化负数、负数减法、负数加法等)

向量是距离点的距离和方向。这就是为什么它会混淆讨论,因为矢量数据结构可以是三维图形引擎中使用的结构中的三个点,X,Y,Z,或者一个二维点(仅X,Y)。在这种情况下,两个这样的点的相减产生一个向量——向量描述从一个源操作数到另一个操作数的距离和方向

这适用于存储,如stl向量或Java向量,因为存储表示为与地址的距离(其中内存地址类似于空间中的点或数字线上的点)

这个概念与数组相关,因为数组可以是为向量分配的存储,但我认为向量是一个比数组更大的概念。向量必须包含距离起点的概念,如果将数组的起点视为起点,那么到数组末尾的距离就是它的大小

因此,表示向量的数据结构必须包含大小,而数组没有存储空间来包含大小,这是根据其分配方式假设的。也就是说,如果动态分配一个数组,则没有存储该数组大小的数据结构,程序员必须假定知道该大小,或者将其存储在某个整数或长整数中

向量数据结构(比如,向量类的设计)确实需要存储大小,因此至少会有一个起始点(数组的基,或内存中的某个地址)以及与该点的距离来指示大小

不过,在描述中,这确实是面向“RAM”的,因为还有一点尚未描述,这必须是描述向量的数据的一部分——元素大小的概念。如果一个向量表示字节,而内存存储通常以字节为单位,那么地址和距离(或大小)将表示一个字节的向量,而不是别的——这是一个非常机器级的想法。一个更高的思想,即某种结构,有它自己的大小——比如,浮点或双倍的大小,或者C++中的结构或类。无论元素大小如何,存储N个元素所需的内存要求向量数据结构对其存储的内容以及该内容的大小有一定的了解。这就是为什么你会用“字符串向量”或“点向量”来思考。向量还必须存储元素大小

因此,基本矢量数据结构必须具有:

地址(起点)

元素大小(它存储的每个元素都有X字节长)

存储的元素数(元素大小的多少倍是“最小”存储大小)

在向量数据结构中的这个简单的3项条目列表中,一个重要的“假设”是地址是分配给内存的,必须在某个点释放内存,并且要防止超出向量末尾的访问

这意味着少了一些东西。为了使vector类工作,在vector中存储的项目数量和为该存储分配的内存量之间存在可识别的差异。通常,您可能会从STL中使用vector了解到,它可能“知道”它有空间存储10个项目,但目前只有2个项目

因此,工作向量类还必须存储内存分配量。这就是它可以动态扩展自身的方式——它现在将拥有足够的信息来自动扩展存储

通过思考如何使一个向量类运行,可以得到操作向量类所需的数据结构

  • 向量与动态数组相同,具有调整大小的能力 在插入或删除图元时自动将其自身删除

  • 矢量元素被放置在连续的存储器中,以便 使用迭代器访问和遍历

  • 在向量中,数据插入到末尾


  • 这当然是一个意见问题。我不清楚“一般数据结构”和“只是一种数据类型”所指的含义。你的答案是什么