-2

我已经开始学习 C++,这让我很头疼。我编写了一个简单的人员“数据库”应用程序,由于某种原因,它在列出人员时失败了。

string search;
cout << "Give the name: ";
cin >> search;

vector<Person> foundPersons;
for(vector<Person>::iterator it = persons.begin(); it != persons.end(); it++) {
    Person p = *it;

    if(search == p.getFirstname() || search == p.getSurname()) {
        foundPersons.push_back(p);
    }
}

if(!foundPersons.empty()) {
    cout << "Found " << foundPersons.size() << " person(s).\n\n";
    cout << "Firstname\tSurname\t\tBirth year\n";
} else {
    cout << "No matches.";
}

for(vector<Person>::iterator it = foundPersons.begin(); it != persons.end(); it++) {
    Person p = *it;
    cout << p.getFirstname() << "\t\t" << p.getSurname() << "\t" << p.getBirthYear() << "\n";
}

cout << "\n";

personsvector<Person>. 我浏览所有条目并将名称与给定的搜索值进行比较。如果找到,我将这个人添加到foundPersons向量中。然后我打印No matches或打印找到的人数和表格标题。接下来,我将遍历所有找到的人员并将其打印到控制台。

如果我添加两个人,例如“Jack Example”和“John Example”,然后搜索“Jack”,它会找到“Jack”并打印出来。但随后程序停止。Windows 显示“程序已停止工作”。在编译期间或程序停止时不会显示任何错误。

怎么了?

4

1 回答 1

12

你的 for 循环不太正确,看起来你打错了,并且正在引用来自两个不同列表的迭代器。改变:

for(vector<Person>::iterator it = foundPersons.begin(); it != persons.end(); it++) {

for(vector<Person>::iterator it = foundPersons.begin(); it != foundPersons.end(); it++) {
于 2013-05-19T17:40:04.853 回答