[C con Clase] limites de vectores.

Programante programante en gmail.com
Lun Jun 21 22:26:57 CEST 2010


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);
        }
};




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