Как перебирать список объектов в С++

Я очень новичок в С++ и изо всех сил пытаюсь выяснить, как я должен перебирать список объектов и получать доступ к ним.

Я пробовал это, где "данные" - это список и "ученик" класса.

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

и получить следующую ошибку

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

Ответ 1

Вы близко.

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

Обратите внимание, что вы можете определить it внутри цикла for:

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

И если вы используете С++ 11, вместо этого вы можете использовать цикл for на основе диапазона:

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

Здесь auto автоматически выводит правильный тип. Вместо этого вы могли бы написать Student const& i.

Ответ 2

- > он работает как указатель u не обязательно использовать *

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

Ответ 3

Также стоит упомянуть, что если вы НЕ намерены изменять значения списка, возможно (и лучше) использовать const_iterator, как показано ниже:

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