11

什么是容器?据我了解:

  • 抽象数据类型只是数据存储方式的逻辑描述,以及允许对该数据执行的操作。例如,堆栈被定义为具有推送、弹出等操作和 LIFO 访问的数据类型。

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

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

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

此外,维基百科为这些术语提供了三个单独的条目。

4

4 回答 4

2

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

于 2012-06-27T01:19:41.247 回答
1

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

容器是一个非常抽象的概念,但通常它意味着(无论如何对我而言)某种形式的封装——从某种意义上说,它可能掩盖底层对象的复杂性,或者可能为一系列不同的可能底层对象提供统一的接口。这是一个深深植根于程序员词汇中的词,人们一直在使用它,因此它的含义非常模糊。;)

于 2012-06-27T01:26:45.927 回答
1

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

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

于 2012-06-27T01:37:05.987 回答
1

正如其他人所说,这些术语使用如此广泛,以至于它们具有各种含义,但这是我最常遇到的用法。

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

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

此外,容器必须是存储其他类型的一种方式,例如向量存储整数。举个例子,在内存中表示一个图有几种方式:邻接矩阵、邻接表、前向星...这些都是数据结构,但它们不是容器,因为它们不包含其他类型,它们只是表示图的节点和链接。这些数据结构存储的数据是节点和链接。

于 2012-06-27T14:56:56.867 回答