Saltar al contenido

¿Qué son los Contenedores/Adaptadores? C++

Necesitamos tu ayuda para compartir nuestras secciones con relación a las ciencias informáticas.

Solución:

Un contenedor es una estructura de datos específica que contiene datos, generalmente en una cantidad ilimitada. Cada tipo de contenedor tiene limitaciones sobre cómo acceder, agregar o eliminar datos de manera eficiente.

A continuación se muestran algunos ejemplos de contenedores que utilizan clases STL.

Contenedores de secuencia

Aquí están los contenedores de secuencia, lo que significa que los datos están ordenados de manera confiable (es decir, hay un anverso y un reverso para ellos. ¡NO quiero decir que se ordenen automáticamente!).

  • A vector es un poco como un tamaño flexible array. Los vectores son de acceso aleatorio, lo que significa que puede acceder a cualquier elemento con índice entero en tiempo constante (al igual que un array). También puede agregar o eliminar desde la parte posterior del vector en tiempo constante amortizado. Sin embargo, en cualquier otro lugar, y probablemente esté considerando tener que volver a copiar potencialmente todos los elementos.
  • A deque, o cola de dos extremos, es como un vector pero se puede agregar al frente o al reverso en tiempo constante amortizado. Aún puede acceder a los elementos en tiempo constante, pero no se garantiza que los elementos deque sean contiguos en la memoria, como vectores o matrices.
  • A lista es una lista enlazada, es decir, datos que están enlazados entre sí por punteros. Tiene acceso en tiempo constante al principio y al final, pero para llegar a cualquier punto intermedio necesita iterar a través de la lista. Sin embargo, puede agregar elementos en cualquier lugar de la lista en tiempo constante, si ya tiene un puntero a uno de los nodos cercanos.

Contenedores asociativos

Estos son contenedores asociativos, lo que significa que los elementos ya no están ordenados, sino que tienen asociaciones entre sí que se utilizan para determinar la singularidad o las asignaciones:

  • A colocar es un contenedor con elementos únicos. Solo puede agregar uno de cada elemento a un conjunto; cualquier otra adición se ignora.
  • A multiconjunto es como un conjunto, pero puede incluir más de un elemento. El conjunto múltiple realiza un seguimiento de cuántos elementos de cada tipo hay en la estructura.
  • A mapatambién conocido como asociativo arrayes una estructura en la que se inserta key-pares de valores; entonces puede buscar cualquier valor proporcionando el key. Así que es un poco como un array que puedes acceder con un string índice (key), o cualquier otro tipo de índice. (Si inserta otro keypar de valores y el key ya existe, simplemente sobrescribe el valor del original key.)
  • A multimapa es un mapa que permite la inserción de múltiples valores para el mismo key. cuando haces un key búsqueda, obtienes un contenedor con todos los valores en él.

Adaptadores de contenedores

Los adaptadores de contenedor, por otro lado, son interfaces creadas al limitar la funcionalidad en un contenedor preexistente y proporcionar un conjunto diferente de funcionalidad. Cuando declara los adaptadores de contenedor, tiene la opción de especificar qué contenedores de secuencia forman el contenedor subyacente. Estos son:

  • A apilar es un contenedor que proporciona acceso LIFO (último en entrar, primero en salir). Básicamente, elimina elementos en el orden inverso al que los inserta. Es difícil llegar a cualquier elemento en el medio. Por lo general, esto va encima de un deque.
  • A cola es un contenedor que proporciona acceso primero en entrar, primero en salir (FIFO). Elimina elementos en el mismo orden en que los inserta. Es difícil llegar a cualquier elemento en el medio. Por lo general, esto va encima de un deque.
  • A prioridad_cola es un contenedor que proporciona acceso ordenado a los elementos. Puede insertar elementos en cualquier orden y luego recuperar el “más bajo” de estos valores en cualquier momento. Las colas de prioridad en C++ STL usan una estructura de montón internamente, que a su vez es básicamente array-Respaldados; por lo tanto, por lo general esto va encima de un vector.

Consulte esta página de referencia para obtener más información, incluida la complejidad del tiempo para cada una de las operaciones y enlaces a páginas detalladas para cada uno de los tipos de contenedores.

C++ es técnico y difícil de entender 😀

Los contenedores son tipos de datos de STL que pueden contener datos.

Ejemplo: vector como una dinámica array

Los adaptadores son tipos de datos de STL que adaptan un contenedor para proporcionar una interfaz específica.

Ejemplo: stack proporcionando una interfaz de pila en la parte superior del contenedor elegido

(nota al margen: ambas son en realidad plantillas, no tipos de datos, pero la definición se ve mejor de esta manera)

La definición técnica de “contenedor” de la documentación de SGI STL es bastante buena:

Un Contenedor es un objeto que almacena otros objetos (sus elementos), y que tiene métodos para acceder a sus elementos. En particular, cada tipo que es un modelo de Container tiene un tipo de iterador asociado que se puede usar para iterar a través de los elementos de Container.

Entonces, un contenedor es una estructura de datos que contiene (“contiene”) una colección de objetos de algún tipo. los key La idea es que hay diferentes tipos de contenedores, cada uno de los cuales almacena objetos de una manera diferente y proporciona diferentes características de rendimiento, pero todos ellos tienen una interfaz estándar para que pueda cambiar uno por otro fácilmente y sin modificar demasiado el código que utiliza el contenedor. La idea es que los contenedores estén diseñados para ser intercambiables tanto como sea posible.

Los adaptadores de contenedor son clases que proporcionan un subconjunto de la funcionalidad de un contenedor, pero pueden proporcionar una funcionalidad adicional que facilita el uso de contenedores para determinados escenarios. Por ejemplo, podría usar fácilmente std::vector o std::deque para una estructura de datos de pila y llamada push_back, backy pop_back como interfaz de pila; std::stack proporciona una interfaz que puede utilizar un std::vector o std::deque u otro contenedor de secuencia pero proporciona el estándar más push, topy pop funciones de miembros para acceder a los miembros.

valoraciones y reseñas

Si entiendes que te ha sido de provecho nuestro artículo, sería de mucha ayuda si lo compartes con otros entusiastas de la programación y nos ayudes a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *