“容器”和“数据结构”之间有什么区别?

时间:2012-06-27 01:15:32

标签: c++ algorithm data-structures

什么是容器?据我了解:

  • 抽象数据类型仅仅是对数据存储方式的逻辑描述以及对该数据允许的操作。例如,堆栈被定义为具有操作push,pop等和LIFO访问的数据类型。

  • 数据结构是这个抽象定义的实际实现,在某些计算机编程语言中,例如,C ++中的堆栈是在标准库中实现的,如std :: stack。

首先,请纠正/加强我目前对上述区别的理解。

其次,究竟什么是容器?我经常听到这个词被抛出来。它和我对数据结构的定义是一样的吗?

此外,维基百科对这些术语有三个单独的条目。

4 个答案:

答案 0 :(得分:1)

没什么,真的。对于同一个词,它们只是两个词,就像我们人类喜欢做的那样。但是,afaik,官方CS术语是数据结构,C ++标准对Container有特定的C ++要求。但是,一般来说,它们是等价的。

答案 1 :(得分:1)

您对ADT与数据结构的印象是正确的 - 尽管它们在很大程度上可以互换。 ADT是显式抽象,数据结构是一个更通用的术语,可以是完全抽象的,或者也可以参考实现细节。

容器是一个非常抽象的概念,但一般来说它(无论如何)意味着某种形式的封装 - 在某种意义上它可能掩盖了底层对象的复杂性,或者可能为一系列不同的可能提供统一的界面基础对象。这是一个如此坚定地植根于程序员词汇的词,人们一直使用它,因此它的含义非常模糊。 ;)

答案 2 :(得分:1)

Container是数据结构的子集。 C ++对容器提出了特殊要求,容器是不同数据结构的实现。

每个维基百科的数据结构:“存储和组织数据的特定方式”。容器是C ++构造,它是记录的集合,它本身就是一个数据结构。

答案 3 :(得分:0)

正如其他人所说的那样,这些术语被广泛使用,它们被用于各种含义,但这里是我最常遇到的用法。

数据结构是计算机科学中的一个术语,它可以用于理论讨论而无需参考任何特定语言。 关于算法的书中讨论了许多数据结构,如队列,树,哈希表... 数据结构几乎可以用任何语言实现。

当一个已经实现的容器库可供程序员立即使用时,容器是一个在特定语言的使用中使用的术语。 几个不同的库可以实现相同的(抽象)数据结构(例如,简单的链接列表),但具有不同的容器,即不同的源代码和不同的名称(一个可以称为“队列”,另一个称为“fifo”,以及第三个“堆叠”)。

此外,容器必须是存储其他类型的方式,例如矢量商店英特尔。 作为一个例子,有几种方法可以在内存中表示图形:邻接矩阵,邻接列表,前向星...所有这些都是数据结构,但它们不是容器,因为它们不包含其他类型,它们只是表示图的节点和链接。这些数据结构存储的数据是节点和链接。