如何在c ++中迭代对象列表

Got*_*ied 34 c++ iterator

我是c +的新手,并且正在努力弄清楚我应该如何迭代对象列表并访问那些成员.

我一直在尝试这里,'数据'是列表,'学生'是一个类.

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

并得到以下错误

error: base operand of ‘->’ has non-pointer type ‘Student’
Run Code Online (Sandbox Code Playgroud)

Sim*_*ple 56

你很亲密

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

请注意,您可以itfor循环内定义:

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

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

for (auto const& i : data) {
    std::cout << i.name;
}
Run Code Online (Sandbox Code Playgroud)

这里auto自动推断出正确的类型.你本来可以写的Student const& i.


jhi*_*515 9

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

for(const auto& student : data)
{
  std::cout << student.name << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

  • 最佳实践是防止您(或在您之后修改它的任何人)在迭代时更改向量的内容。如果您正在实现一个转换函数,您可能想要改变向量,从而删除 const。但通常不建议编写符合大多数行业标准的代码。 (4认同)
  • 在基于范围的循环中“const”是强制的还是避免它是一个坏习惯? (2认同)
  • @user2284570 据我所知,您将被限制为 `std::vector&lt;T&gt;::size_type` 的最大值,即 2^64 / `sizeof(T)` (即对象的最大数量)可以在内存的地址空间中表示,这也是为什么在某些情况下不应该使用STL容器来代替数据库。 (2认同)