How to iterate through a list of objects in C++?

I'm very new to C++ and struggling to figure out how I should iterate through a list of objects and access their members.

I've been trying this where data is a std::list and Student a class.

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

and getting the following error:

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

5 Answers

You're close.

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

Note that you can define it inside the for loop:

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

And if you are using C++11 then you can use a range-based for loop instead:

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

Here auto automatically deduces the correct type. You could have written Student const& i instead.

3

Since C++ 11, you could do the following:

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

-> it works like pointer u don't have to use *

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

It is also worth to mention, that if you DO NOT intent to modify the values of the list, it is possible (and better) to use the const_iterator, as follows:

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

if you add an #include <algorithm> then you can use the for_each function and a lambda function like so:

for_each(data.begin(), data.end(), [](Student *it) { std::cout<<it->name; }); 

you can read more about the algorithm library at

and about lambda functions in cpp at

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like