我对容器和集合之间的区别感到困惑。我在维基百科上读到了这些,这就是我所理解的......
集合:存储可变数量的对象。防爆。列表,设置......
容器:DataStructures?防爆。 dequeue,stack ..
但我认为像list,tree等的集合是数据结构,那么什么是容器。这又是什么意思..
实现容器的数据结构包括数组,列表,映射, 队列,集合,堆栈,表格,树木和向量。
答案 0 :(得分:9)
” C ++语言标准(ISO / IEC 14882-1998 [E])在第23条中说容器是“C ++程序可用于组织信息集合的组件”,并补充说:“容器是存储其他对象的对象它们通过构造函数,析构函数,插入和擦除操作来控制这些对象的分配和释放。“它继续列出两种常规类型的容器:序列和关联容器。
C ++标准说:“序列是一种容器,它将所有相同类型的有限对象组织成严格的线性排列。”三种类型的序列是vector,list和deque。
C ++容器不能包含混合类型!
也许最有用的C#集合根本不被视为集合。 C#数组比C ++数组强大得多,它们本身支持许多需要C ++类的操作。例如,Length属性告诉您数组中元素的数量,比如C ++容器中的size()方法。 “
从http://soa.sys-con.com/node/39460获取,您可以阅读本文,以便更好地理解容器和集合概念。
答案 1 :(得分:9)
除了在AWT GUI组件的上下文中,Java并没有真正使用术语“容器”,其中Container
表示可以包含其他组件的GUI组件。
Collection
在Java中用于包含对象的数据结构。
计算机科学通常倾向于将它们视为或多或少的同义词。
答案 2 :(得分:6)
ISO C ++标准确实没有建立非常明确的区别。它确实为容器提供了正式的定义(23.2.1):
容器是存储其他对象的对象。
...但它没有为集合提供这样的正式定义,并且更普遍地使用该术语。它将元组描述为对象的集合,即使按照上面的定义,它也是容器。
集合:存储可变数量的对象。防爆。列表,设置......
容器:DataStructures?防爆。 dequeue,stack ..
但我认为像list,tree等的集合是数据结构, 什么是容器。这又是什么意思..
据我所知,标准没有相反指定任何内容,这些都是集合和容器。它们也恰好是数据结构,但“数据结构”是一种非常通用的计算机科学术语,适用于以某种方式组织数据的任何类型的聚合。
使用C ++,你会发现一个更有用的区别在于Stephanov设想的原始STL定义的概念。
Sequence是一个可变大小的Container,其元素是排列的 以严格的线性顺序。它支持插入和删除 元件。
上面介绍了list
,deque
和vector
等容器。
Sorted Associative Container是一种关联容器。 Sorted Associative Containers使用其键上的排序关系; 如果两个键都不小于,则认为两个键是等效的 另一个。 (如果排序关系是不区分大小写的字符串 比较,例如,然后键“abcde”和“aBcDe” 等效的。)
以上介绍了set
和map
等容器。
Pair关联容器是一个关联容器 将密钥与其他对象相关联。 Pair的值类型 关联容器是对的。 [1]
以上描述了map
等容器。
关于这个主题的进一步阅读,关注轻微的语义差异:OOP Terminology: "Container" & "Collection"
答案 3 :(得分:3)
差异更多的是味道而不是实质,但我在听这两个术语时的感觉是
这显然是主观的,但考虑到如何实现C ++容器(值语义)以及Java colloection的行为(对象的多态性),以及技术上的Java变量(自动引用指针),可能都是由于值/指针语义。
C ++容器的值不能是多态的,但在指向多态值的指针中可以是同态的,所以C ++ collection<T>
可以只是container<unique_ptr<T> >
(选择你想要具体化的容器),其中container<T>
没有严格的java对应关系。