C++如何访问结构列表的字符串成员

C++ how to access a string member of a list of structures

本文关键字:列表 结构 字符串 成员 访问 何访问 C++      更新时间:2023-10-16

我有一个这个结构:

struct student {
    string name;
    int practical_grade;
    int exam_grade;
    int number_of_absences;
};

我已经创建了此结构的列表。我可以访问所有int成员,但是当我尝试访问name字段时,我的程序停止了。知道为什么吗?

int main() {
    string studentName;
    int practicalGrade;
    int examGrade;
    int numberOfAbsences;
    list <student> lista;
    list <student>::iterator it = lista.begin();
    cout<<"tName: "; cin>>studentName;
    cout<<"tpractical grade: "; cin>>practicalGrade;
    cout<<"texam grade: "; cin>>examGrade;
    cout<<"tnumber of absences: "; cin>>numberOfAbsences;
    lista.push_front({studentName,practicalGrade,examGrade,numberOfAbsences});
    cout<< "elem: " << (*it).name;
    cout<< "practical grade: " << (*it).practical_grade;
    cout<< "nexam: " << (*it).exam_grade <<' ' << (*it).number_of_absences <<"n"; 
}

一开始,列表是空的。在空列表上调用 lista.begin() 时,它会将迭代器返回到列表的末尾。然后,当您取消引用迭代器时:(*it) ,您将引用不指向任何元素的结束迭代器。这具有未定义的行为。

解决方案:当列表实际包含元素时声明并初始化it。或者简单地说:

cout<< "elem: " << lista.front().name;
// ...

评论已经回答了。在代码中:

lista.push_front({studentName,practicalGrade,examGrade,numberOfAbsences});
it =  lista.begin(); // Update it
cout<< "elem: " << (*it).name;
cout<< "practical grade: " << (*it).practical_grade;
cout<< "nexam: " << (*it).exam_grade <<' ' << (*it).number_of_absences <<"n";