如何在C++中遍历对象列表?

9njqaruj  于 2023-03-09  发布在  其他
关注(0)|答案(5)|浏览(160)

我是C++的新手,正在努力弄清楚我应该如何遍历对象列表并访问它们的成员。
我一直在尝试这样做,其中data是一个std::list,而Student是一个类。

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’
avwztpqn

avwztpqn1#

你很接近了。

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

注意,您可以在for循环中定义it

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

如果你使用的是C++11,那么你可以使用一个基于范围的for循环:

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

这里auto自动推导出正确的类型,你可以写Student const& i来代替。

ruarlubt

ruarlubt2#

从C++ 11开始,您可以执行以下操作:

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

wz1wpwve3#

还值得一提的是,如果您不打算修改列表的值,可以(并且更好)使用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;
}
pwuypxnk

pwuypxnk4#

如果你添加了一个#include <algorithm>,那么你可以使用for_each函数和一个lambda函数,如下所示:

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

您可以在https://en.cppreference.com/w/cpp/algorithm阅读有关算法库的更多信息
以及关于cpp中λ函数在https://learn.microsoft.com/en-us/cpp/cpp/lambda-expressions-in-cpp?view=vs-2019上的应用

bbuxkriu

bbuxkriu5#

  • 〉它的工作原理就像指针u不必使用 *
for( list<student>::iterator iter= data.begin(); iter != data.end(); iter++ )
cout<<iter->name; //'iter' not 'it'

相关问题