Tengo un vector de Estudiante que tiene un nombre de campo.
Quiero recorrer el vector.
void print(const vector<Student>& students)
{
vector<Student>::iterator it;
for(it = students.begin(); it < students.end(); it++)
{
cout << it->name << endl;
}
}
Al parecer, esto es ilegal en C++.
Ayuda por favor.
- Por favor, lea acerca de prefijo frente a postfix operador de incremento.
it++
debe ser++it
, yit++
es necesario en casos raros (es decir, cuando el borrado, mientras que la iteración). - Su bastante obvio cuál es el problema en este caso. Sin embargo, en el futuro, usted debe incluir en su pregunta, el mensaje de error exacto que el compilador está dando.
Usted tiene dos (tres en C++11) opciones:
const_iterator
s y los índices (+ «rango» en C++11)Se debe preferir el uso de
!=
en lugar de<
con iteradores que este último no funciona con todos los iteradores, el antiguo testamento. Con el ex-usted puede incluso hacer que el código sea más genérico (de modo que usted puede incluso cambiar el tipo de contenedor sin tocar el bucle)<
), otros no. Por ejemplo, std::list tiene bi-direccional de los iteradores, que sólo puede ser comparado por la igualdad.Uso
const_iterator
lugar. Uniterator
permite la modificación de lavector
, así que usted no puede conseguir uno de unconst
contenedor.También, la idiomáticas manera de escribir este bucle utiliza
it != students.end()
en lugar de<
(aunque esto debería funcionar en unvector
).list
o algo similar en su lugar, el código no funcionará. A fin de utilizar el!=
forma.C++11 de estilo:
Lugar de
vector<Student>::iterator
, usovector<Student>::const_iterator
.