resueltos - Cómo iterar a través de una lista de objetos en c++
miembros de una clase en programacion orientada a objetos (4)
-> Funciona como un puntero que no tienes que usar *
for( list<student>::iterator iter= data.begin(); iter != data.end(); iter++ )
cout<<iter->name; //''iter'' not ''it''
Soy muy nuevo en c ++ y me cuesta entender cómo debo recorrer una lista de objetos y acceder a los miembros.
He intentado esto donde ''datos'' es la lista y ''estudiante'' una clase.
std::list<Student>::iterator<Student> it;
for(it = data.begin(); it != data.end(); ++it){
std::cout<<(*it)->name;
}
y obteniendo el siguiente error
error: base operand of ‘->’ has non-pointer type ‘Student’
Desde C ++ 11, podrías hacer lo siguiente:
for(const auto& student : data)
{
std::cout << student.name << std::endl;
}
También vale la pena mencionar que si NO intenta modificar los valores de la lista, es posible (y mejor) utilizar el const_iterator, de la siguiente manera:
for (std::list<Student>::const_iterator it = data.begin(); it != data.end(); ++it){
// do whatever you wish but don''t modify the list elements
std::cout << it->name;
}
Usted está cerca.
std::list<Student>::iterator it;
for (it = data.begin(); it != data.end(); ++it){
std::cout << it->name;
}
Tenga en cuenta que puede definirlo dentro del bucle for
:
for (std::list<Student>::iterator it = data.begin(); it != data.end(); ++it){
std::cout << it->name;
}
Y si está usando C ++ 11, entonces puede usar un bucle for
rango basado en:
for (auto const& i : data) {
std::cout << i.name;
}
Aquí auto
deduce automáticamente el tipo correcto. Podrías haber escrito Student const& i
lugar.