私はc ++が初めてであり、オブジェクトのリストを反復処理してそこのメンバーにアクセスする方法を見つけるのに苦労しています。
「データ」がリストで、「学生」がクラスである場合、私はこれを試してきました。
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’
あなたは近いです。
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;
}
C++ 11を使用している場合は、代わりに範囲ベースのfor
ループを使用できます。
for (auto const& i : data) {
std::cout << i.name;
}
ここでauto
は自動的に正しい型を推測します。 Student const& i
代わりに。
->ポインタのように機能しますuを使用する必要はありません*
for( list<student>::iterator iter= data.begin(); iter != data.end(); iter++ )
cout<<iter->name; //'iter' not 'it'
また、リストの値を変更するつもりがない場合は、次のように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;
}
C++ 11以降では、次のことができます。
for(const auto& student : data)
{
std::cout << student.name << std::endl;
}