Question Comment parcourir une liste d'objets en c ++


Je suis très novice en c ++ et j'ai du mal à comprendre comment je dois parcourir une liste d'objets et y accéder.

J'ai essayé ceci lorsque «data» est la liste et «student» une classe.

std::list<Student>::iterator<Student> it;
for(it = data.begin(); it != data.end(); ++it){
    std::cout<<(*it)->name;
}

et obtenir l'erreur suivante

error: base operand of ‘->’ has non-pointer type ‘Student’

18
2018-03-08 12:40


origine


Réponses:


Tu es proche

std::list<Student>::iterator it;
for (it = data.begin(); it != data.end(); ++it){
    std::cout << it->name;
}

Notez que vous pouvez définir it à l'intérieur de for boucle:

for (std::list<Student>::iterator it = data.begin(); it != data.end(); ++it){
    std::cout << it->name;
}

Et si vous utilisez C ++ 11, vous pouvez utiliser une plage basée sur for boucle à la place:

for (auto const& i : data) {
    std::cout << i.name;
}

Ici auto déduit automatiquement le type correct. Tu aurais pu écrire Student const& i au lieu.


34
2018-03-08 12:43



-> cela fonctionne comme un pointeur ne doit pas être utilisé *

for( list<student>::iterator iter= data.begin(); iter != data.end(); iter++ )
cout<<it->name;

2
2018-03-08 12:43



Il convient également de mentionner que si vous n'avez pas l'intention de modifier les valeurs de la liste, il est possible (et préférable) d'utiliser const_iterator comme suit:

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

1
2017-11-19 20:44