2010-03-03 9 views

Respuesta

6

La respuesta corta es no. La respuesta larga es, porque iteradores no se espera que saber acerca de los contenedores o rangos que están interactuando sobre, sólo se espera que

  • ser capaz de saltar al siguiente elemento (inc o DEC para siguiente o anterior)
  • Se desmerecen para revelar una referencia al valor al que apuntan
  • Y a lo largo del curso se comparan con otros iteradores, lo que es más importante, un iterador "final" de algún tipo.

Además, ciertos iteradores de tipos pueden hacer más que lo anterior, pero principalmente se requiere que tengan/realicen lo anterior de una forma u otra.

+0

Sí que definitivamente necesita iteradores que apunta a al final o al comienzo para comparar su iterador actual, algo que podría determinarse cuando defina la cadena? – DogDog

1
  • Para el punto final de la cadena: Supongamos que la cadena de caracteres internos tiene un final nulo. Luego, al desreferenciar el iterador para ver si están '\ 0' para determinar la siguiente posición, es el punto final. Pero para otra cadena no terminada en nulo, es imposible conocer dicha información.
  • Para el punto de inicio de la cadena: No hay forma de hacerlo.

El std :: string :: iterator predeterminado es solo un iterador aleatorio de dos direcciones, no sabe nada sobre el contenedor.

Pero si está trabajando en la plataforma Visual C++, tal vez usted puede utilizar alguna manera la piratería como seguir para obtener el control de su contenedor, pero es muy peligroso:

// it is the passed in string::iterator parameter. 
    if (it._Has_container()) { 
     string* strRef = (string*)it._Mycont; 
    } 
Cuestiones relacionadas