2011-07-04 12 views
6

En uno de los artículos C++ en STL, que se dice que -contenedores adaptadores no son compatibles con los iteradores

Desde adaptadores de contenedores no son compatibles con los iteradores, de ahí que no se pueden utilizar con los algoritmos de STL.

¿Pero no explicaba por qué los adaptadores de contenedor no son compatibles con los iteradores? ¿Alguien puede explicarme lo mismo?

Respuesta

6

¿Cuál es el punto de una pila o cola que tiene un iterador? Una pila es, por definición, algo que solo puede presionar y abrir ... Un iterador destruiría el propósito de estos adaptadores

+2

+1. Para decir lo mismo de otra manera, el propósito de un iterador de contenedor es restringir la API del contenedor a las operaciones mínimas requeridas de la abstracción de la pila/cola/lo que sea. La iteración no es parte de un mínimo FIFO o LIFO. Si desea una cola iterable, que se comporte como una secuencia de lectura pero solo se pueda mutar como una cola, utilice la interfaz de contenedor completo (y, a elección, no llame a 'insert', only' push_back'), o bien escriba su propio adaptador de contenedor con una interfaz más amplia que 'std :: queue'. –

+0

Entonces? El conjunto de operaciones expuestas sigue siendo un superconjunto de iteradores de entrada y salida. Y muchos algoritmos STL funcionan en eso. P.ej. 'std :: copy' bien podría usarse para empujar elementos en una pila. – MSalters

+0

@MSalters: 'std :: copy' se puede usar para insertar elementos en una pila, con' back_inserter'. La pila no necesita un iterador para eso. Cualquier operación que requiera un iterador * sobre la pila * iría más allá de la definición mínima de la pila LIFO. Si los iteradores exponen un superconjunto estricto de las operaciones de la pila, eso significa que no es apropiado para una interfaz de pila mínima exponer un iterador. –

1

Me gustaría señalar que esto es solo una observación, no una regla.

Es decir, los adaptadores de contenedores proporcionados en la STL no apoyan iteración, porque restringen la interfaz para ajustarse a un modelo específico:

  • Una pila solamente puede ser manipulado en un extremo
  • En una cola solo puede presionar en un extremo y recuperar desde el otro

Sin embargo, esta no es una regla y puede decidir crear adaptadores que admitan la iteración.

Cuestiones relacionadas