Hoe te herhalen via een lijst met objecten in C++?

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 dataeen std::listen Studenteen 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 itin de forlus 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 forlus gebruiken in plaats daarvan:

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

Hier autodoet automatisch het juiste type af. Je had kunnen schrijven Student const& iin 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_iteratorals 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_eachen 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

Other episodes