[C con Clase] limites de vectores.

Jorge Vega Sanchez memmaker650 en gmail.com
Mar Jun 22 08:25:00 CEST 2010


JUstamente esto lo encontré luego navegando por internet. Es un tanto peculiar porque permite definir vectores sin un tamaño específico pero es muy interesante porque lanza errores cuando te sales de rango.

Muchas gracias.
El 21/06/2010, a las 22:26, Programante escribió:

> El 21/06/10 19:29, Jorge Vega Sanchez escribió:
>> Buenas, esta tarde haciendo unas pruebas para una cosa que teng que implementar me he llevado una sorpresa bastante grande.
>> Estaba definiendo vectores, de la forma "normal" y luego con new y cual ha sido mi sorpresa de que puedo visualizar y asignar valores fuera del rango del vector.
>> 
>> Es decir si defino un vector/array de tamaño 10, puedo imprimir por pantalla en valor de la posición 12. Pensaba que daría error o que saldría un valor extraño pero no.
>> 
>> Me gustaría saber si hay alguna forma de que de error sin tener que controlar nosotros que estamos dentro de rango. Es decir si me he dejado algo. Por cierto he leido información sobre la variables size_t que se supone que se usan para controlar tamaños de vectores y cosas similares. Pero en casos como el que pongo no tengo ni idea de como incluirlo.
>> 
> Podrías extenderla con una clase que haga la comprobación:
> 
> template <typename T>
> class safe_vector : public std::vector<T> {
> 
> public:
>    explicit safe_vector(size_t n, const T& value = T())
>      : std::vector<T>(n, value) {  }
> 
>        T& operator[] (size_t n) {
>                if ((n < 0) || (n >= std::vector<T>::size()))
>                        throw std::runtime_error(std::string("Bad index"));
>                return std::vector<T>::operator[](n);
>        }
> };
> 
> 
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ





Más información sobre la lista de distribución Cconclase