La sección §24.1/5 del estándar de C++ (2003) lee,¿Qué son los valores singulares y no singulares en el contexto de los iteradores de STL?
Así como un puntero normal a una matriz garantiza que existe un valor de puntero que apunta más allá del último elemento de la matriz, por lo que para cualquier tipo de iterador hay un valor de iterador que apunta a pasando el último elemento de un contenedor correspondiente . Estos valores se llaman valores pasados. Los valores de un iterador i para los cuales se define la expresión * i se llaman desreferenciables. La biblioteca nunca supone que los valores pasados son desmarcables. Los iteradores también pueden tener valores singulares que no sean asociados a cualquier contenedor. [Ejemplo:. Después de la declaración de un puntero no inicializado x (como con int * x;), x debe ser siempre supone que tienen un valor singular de un puntero] Resultados de la mayoría de expresiones son indefinido para valores singulares; la excepción única es una asignación de un valor no singular a un iterador que tiene un valor singular. En este caso el valor singular se sobrescribe de la misma manera que cualquier otro valor. Los valores deducibles siempre son no singulares.
realmente no podía entender el texto mostrado en negrita ?
- ¿Qué es el valor singular y el valor no singular? ¿Cómo se definen? ¿Y donde?
- How y por qué valores desreferenciables son siempre nonsingular?
¿Puede un 'istream_iterator' por defecto ser considerado singular? –
No lo creo. Es un iterador pasado válido. Si fuera singular, no podría usarlo para definir el enf de una secuencia, ya que no podría compararlo con ningún otro iterador. – templatetypedef