una resueltos programacion orientada objetos miembros metodos ejercicios ejemplos codigo clases clase c++ iterator

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.