"container"和"data structure"有什么区别?
What is the difference between a "container" and a "data structure"?
什么是容器? 据我了解:
-
抽象数据类型只是对数据的存储方式以及允许对该数据的操作的逻辑描述。 例如,堆栈被定义为具有操作推送、弹出等和 LIFO 访问权限的数据类型。
-
数据结构是这个抽象定义的实际实现,在某些计算机编程语言中,例如,C++中的堆栈在标准库中实现,如std::stack。
首先,请纠正/加强我目前对上述区别的理解。
其次,容器到底是什么? 我经常听到这个词被抛出。 它与我对数据结构的定义相同吗?
此外,维基百科对这些术语有三个单独的条目。
没什么,真的。它们只是同一个术语的两个词,就像我们人类喜欢做的那样。但是,afaik,官方的CS术语是数据结构,C++标准对容器有特定的C++要求。但是,一般来说,它们是等效的。
您对ADT与数据结构的印象是正确的 - 尽管它们在很大程度上是可以互换的。ADT 是显式抽象的,数据结构是一个更通用的术语,可以完全抽象,也可以指实现细节。
容器是一个非常抽象的概念,但通常它意味着(无论如何对我来说)某种形式的封装 - 从某种意义上说,它可能掩盖底层对象的复杂性,或者可能为一系列不同的可能底层对象提供统一的接口。这是一个深深植根于程序员词汇中的词,以至于人们一直在使用它,因此它的含义非常模糊。;)
容器是数据结构的子集。 C++对容器提出了特殊要求,容器是不同数据结构的实现。
根据维基百科,数据结构是"存储和组织数据的特定方式"。 容器是一种C++构造,它是记录的集合,记录本身就是一个数据结构。
正如其他人所说,这些术语使用得如此广泛,以至于它们具有各种含义,但这是我最常遇到的用法。
数据结构是计算机科学中的一个术语,它可以用于理论讨论,而无需参考任何特定语言。关于算法的书中讨论了很多数据结构,比如队列、树、哈希表......数据结构几乎可以用任何语言实现。
容器是一个术语,用于特定语言,当程序员可以立即使用已经实现的容器的可用库时。几个发行版库可以实现相同的(抽象)数据结构(例如,一个简单的链表),但具有不同的容器,即不同的源代码和不同的名称(一个可以称为"队列",另一个称为"fifo",第三个称为"堆栈")。
此外,容器必须是存储其他类型的一种方式,例如向量存储整数。例如,有几种方法可以在内存中表示图形:邻接矩阵、邻接列表、正向星形...所有这些都是数据结构,但它们不是容器,因为它们不包含其他类型,它们只是表示图形的节点和链接。这些数据结构存储的数据是节点和链接。
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- Qt:remove() 和 rmdir() 有什么区别
- 这 4 个 lambda 表达式之间有什么区别?
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- typedef 枚举和枚举类有什么区别?
- &C::c 和 &(C::c) 有什么区别?
- ascii 和 unicode 在处理级别有什么区别吗?
- C 中的常量限定符和 C++ 中的常量限定符有什么区别?
- "ABC" 和 "ABC" ) 在C++中有什么区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- 两种访问I2C总线的方法有什么区别?
- 两种模板示例有什么区别?
- 这两种C++语法之间有什么区别?
- lua 5.0.2 模块和 5.3.5 有什么区别?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- std::enable_if 和 std::enable_if_t 有什么区别?