Ik ben erg nieuw voor C++ en worstelt om erachter te komen hoe ik een lijst met objecten moet herhalen en toegang krijgen tot hun leden.
Ik heb dit geprobeerd waar data
een std::list
en Student
een klasse is.
std::list<Student>::iterator<Student> it;
for (it = data.begin(); it != data.end(); ++it) {
std::cout<<(*it)->name;
}
en het krijgen van de volgende fout:
error: base operand of ‘->’ has non-pointer type ‘Student’
Antwoord 1, Autoriteit 100%
je bent dichtbij.
std::list<Student>::iterator it;
for (it = data.begin(); it != data.end(); ++it){
std::cout << it->name;
}
Merk op dat u it
in de for
lus kunt definiëren:
for (std::list<Student>::iterator it = data.begin(); it != data.end(); ++it){
std::cout << it->name;
}
En als u C++ 11 gebruikt, kunt u een bereik-gebaseerde for
lus gebruiken in plaats daarvan:
for (auto const& i : data) {
std::cout << i.name;
}
Hier auto
doet automatisch het juiste type af. Je had kunnen schrijven Student const& i
in plaats daarvan.
Antwoord 2, Autoriteit 7%
Sinds C++ 11, kunt u het volgende doen:
for(const auto& student : data)
{
std::cout << student.name << std::endl;
}
Antwoord 3, autoriteit 3%
Het is ook de moeite waard om te vermelden dat als je NIET van plan bent de waarden van de lijst te wijzigen, het mogelijk (en beter) is om de const_iterator
als volgt te gebruiken:
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;
}
Antwoord 4, autoriteit 2%
-> het werkt als een aanwijzer die u niet hoeft te gebruiken *
for( list<student>::iterator iter= data.begin(); iter != data.end(); iter++ )
cout<<iter->name; //'iter' not 'it'
Antwoord 5, autoriteit 2%
als u een #include <algorithm>
toevoegt, kunt u de functie for_each
en een lambda-functie als volgt gebruiken:
for_each(data.begin(), data.end(), [](Student *it)
{
std::cout<<it->name;
});
u kunt meer lezen over de algoritmebibliotheek op https://en.cppreference.com/ met cpp/algoritme
en over lambda-functies in cpp op https://docs.microsoft.com/en-us/cpp/cpp/lambda-expressions-in-cpp?view=vs-2019