C++ 什么是堆栈、队列、向量、数组和列表?

C++ 什么是堆栈、队列、向量、数组和列表?,c++,arrays,vector,C++,Arrays,Vector,我被介绍给array。而不是列表。而不是向量。而不是堆栈和队列。它们都可以包含某种类型的内存。但为什么会有这么多呢 我读到添加或删除时列表更好,而做其他事情时,向量更好。但什么是堆栈和队列?std::array呢 P>有没有一个优秀的程序员能简单地或具体地解释差异、利弊、何时使用这些不同的容器?< /P> < P>是的,今天已经启动了世界统一的C++ FAQ,这些问题应该解决所有这些问题。您可以从以下链接找到它: 你会发现几乎所有关于FC++的FAQ都有相关的内容。所以,我会给出一个很简短的

我被介绍给array。而不是列表。而不是向量。而不是堆栈和队列。它们都可以包含某种类型的内存。但为什么会有这么多呢

我读到添加或删除时列表更好,而做其他事情时,向量更好。但什么是堆栈和队列?std::array呢

<> P>有没有一个优秀的程序员能简单地或具体地解释差异、利弊、何时使用这些不同的容器?< /P> < P>是的,今天已经启动了世界统一的C++ FAQ,这些问题应该解决所有这些问题。您可以从以下链接找到它:


<>你会发现几乎所有关于FC++的FAQ都有相关的内容。所以,我会给出一个很简短的答案:每个对象都有不同的目标和需求。 堆栈和队列是混淆某些访问方法的对象,通常允许更好的机制来实现并发。如果需要按特定顺序获取数据,堆栈和队列就是适合您的对象

Vector,至少在C中是对数组的一种实现,它允许您在运行时增加和减少数组大小,而不会损害数组最重要的属性—内存中的顺序性

列表在内存中不是顺序的,而是非常动态的-添加和删除项的成本低于向量,但以访问时间为代价(因为它们不是顺序的)

总结如下:

如果您需要一个接一个地获取项目,请按照给定的顺序使用队列

如果需要获取第一次插入的最后一项,请使用堆栈

如果您事先知道要使用的元素数量,并且顺序根本不重要,那么就使用数组

如果顺序无关紧要,并且元素的数量在运行时发生变化,而添加/删除并不经常,但查询数据是-使用向量

如果有更多的插入/删除,则查询-使用列表。 在列表中,您还可以通过指针更改廉价地利用订单-因此这也可以用于它


这些都很短,一点也不完整。。每个数据结构的背后都有更多的内容

您正在谈论的是不同的数据结构。那我们为什么要用不同的呢?原因是不同的数据结构擅长于不同的事情

数据结构因其元素之间的关系以及可以对数据结构执行的操作而不同

不同数据结构上的不同操作可能具有不同的复杂性。复杂度是衡量操作数量随数据量的增加而增加的程度

既然你的问题是关于C++的,我将讨论2种数据结构:向量和列表。 还有一个顺序容器-deque,它类似于向量,主要区别在于在前面插入元素等操作要快得多

矢量 这是一个非常有用的数据结构,是一个自动增长的数组。由于数组存储在连续的内存块中,因此某些操作的计算密集度低于其他操作

让我们看看我们可以对向量进行的运算

元素访问 因为所有元素都在一个连续的内存块中,所以获取第n个元素是O(1)

添加到末尾 如果我们还有空间,并且知道向量的大小,这个运算就是O(1)。如果没有空间,我们需要分配更多空间,并将所有数据复制到新空间。这是O(n),但这种情况很少发生

插入和移除 这涉及到将插入位置之后的所有元素向右移动。这是O(n)

列表 这种结构比向量有一些优点。元素不在连续的内存块中,这使得插入操作更快

元素访问 要到达第n个元素,必须从头到尾遍历每个列表节点,直到到达第n个元素。此操作为O(n)

添加到末尾 如果我们有一个指向最后一个元素的指针,这个操作就是O(1)

插入和移除 这涉及到找到插入-O(n)的位置并修复指针。这看起来同样复杂,但向量必须复制元素,而列表只能查找正确的位置。如果我们想在一开始就插入一个元素,就会看到很大的不同。一个列表,将不需要查看任何内容,而一个向量将需要移动几乎所有的元素

堆栈和队列 这些是容器适配器。它们包装了上述容器,实现了更强的关系,并添加了新的操作


这两者的区别在于堆栈是后进先出,而队列是先进先出。不同的算法使用不同的数据结构,因为可用的操作更快。

数组、向量、堆栈、队列、数据块等都有不同的属性,它们在插入/删除方面都更好/更差,其中一些算法甚至无法插入/删除,而只支持pop/push操作。你应该认真地查阅一本关于差异的教程。你真的应该得到一本关于数据结构的书。或者算法。这通常是一个完整的计算机科学学期课程,不是对堆栈溢出问题的简短回答。谢谢。我明白了要点。只是一个实际问题。当人们“可以”使用数组或向量/列表时。他们会用哪一个?我在“真实世界”编程方面没有任何经验,所以我想知道“真实世界”程序员是做什么的。因为我首先介绍了数组,而数组是我最熟悉的东西,所以我认为数组是最好的,直到我被介绍到堆栈和队列。所以,如果给定数组和向量/列表之间的选择,您将使用哪一个?正如我所说的,这取决于位置。如果我写一个只存储少量信息的短程序,我会使用向量。只有当你需要优化时