El estándar ISO C++ realmente no establece una distinción muy clara. Proporciona una definición formal de contenedor (23.2.1):
Los contenedores son objetos que almacenan otros objetos.
... sin embargo, ofrece ninguna definición formal de recolección y utiliza ese término un poco más general.Describe la tupla, por ejemplo, como una colección de objetos, aunque por la misma definición anterior, también es un contenedor .
Colecciones: Almacena el número variable de objetos. Ex. lista, establecer ...
Contenedores: DataStructures? Ex. dequeue, stack ..
Pero pensé que las colecciones como lista, árbol, etc. son estructuras de datos, , entonces cuáles son los contenedores. Además, ¿qué significa esto?
Por lo que yo veo, y la norma no especifica nada en contra, estos son tanto colecciones como contenedores. También son estructuras de datos, pero la "estructura de datos" es un término informático muy general para cualquier tipo de agregado que organiza datos de alguna manera.
Con C++, donde encontrará una distinción más útil es en los conceptos que definió el STL original, tal como lo concibió Stephanov.
Una secuencia es un contenedor de tamaño variable cuyos elementos están dispuestos en un orden lineal estricto. Admite la inserción y eliminación de elementos .
Lo anterior describe contenedores como list
, deque
, y vector
.
Un contenedor asociativo ordenado es un tipo de contenedor asociativo. Los contenedores asociativos clasificados utilizan una relación de pedido en sus claves; dos claves se consideran equivalentes si ninguna es inferior a la otra. (Si la relación de orden entre mayúsculas y minúsculas comparación de cadenas , por ejemplo, entonces las teclas "abcde" y "ABCDE" son equivalente.)
Lo anterior describe contenedores como set
y map
.
Un contenedor asociativo de par es un contenedor asociativo que asocia una clave con algún otro objeto. El tipo de valor de un Pair Associative Container es un par. [1]
Lo anterior describe contenedores como map
.
En cuanto a lectura adicional sobre este tema con respectos a las ligeras diferencias semánticas: OOP Terminology: "Container" & "Collection"
Dudo que haya una diferencia práctica. La mayoría de la gente parece usarlos de manera intercambiable. Sin embargo, puede haber algunas rarezas en las jerarquías OO. Según recuerdo, Java tiene una clase (o tal vez una interfaz) para contenedores, pero algunas cosas que uno pensaría que los contenedores no se ajustan a esa designación, entonces en las discusiones de Java, me puedo imaginar usando otro término para referirse al otro clases similares a contenedores (advertencia: no he usado Java desde hace tiempo, así que podría estar recordando el nombre incorrecto). –