Si está preguntando cómo inicializar un vector constante para que tenga contenidos interesantes, entonces la respuesta probablemente sea usar el constructor de copia. Primero, llena laboriosamente un vector, luego crea su nuevo vector constante a partir de él. O puede usar elvector<InputIterator>(InputIterator, InputIterator)
plantilla constructor para inicializar desde algún otro tipo de contenedor o matriz. Si es una matriz, entonces podría haberse definido con una lista de inicialización.
Es de esperar que algo como esto se acerque a lo que desea:
const T ra[3] = {t1, t2, t3};
const vector<const T> v(ra, ra+3);
Si está preguntando cómo pasar un vector constante a una función que toma un vector, la respuesta es:
- no puede, porque la función podría alterar el vector y su objeto / referencia es constante. Haga una copia no constante del original y transmítala.
o
- use
const_cast
para eliminar la constness con el fin de pasarla a una función que toma un vector no constante pero que usted sabe que no modificará el vector.
Esto último es una de esas cosas que, con toda razón, hará que cualquiera que lo vea haga comentarios sobre las gafas y el hecho de que no hacen nada. Para eso const_cast
es exactamente , pero hay un argumento razonablemente fuerte que dice que si lo necesita const_cast
, ya ha perdido.
Hacer ambas cosas (crear un vector constante a partir de uno que no sea constante con el constructor de copia y luego desechar la constante) es definitivamente incorrecto; debería haber usado un vector no constante. Así que elige como máximo uno de estos para hacer ...
[ Editar: acabo de notar que estás hablando de una diferencia entre vector<T>
y const vector<const T>
. Desafortunadamente en el STL, vector<const T>
y vector<T>
son tipos completamente no relacionados, y la única forma de convertir entre ellos es copiando. Esta es una diferencia entre vectores y matrices: a T**
se puede convertir de forma silenciosa y segura a const T *const *
]