class Person
{
public:
Person(string name, float score)
{
this->m_Name = name;
this->m_Score = score;
}
bool operator==(const Person& p1) const
{
if (this->m_Name == p1.m_Name && this->m_Score==p1.m_Score)
return true;
return false;
}
string m_Name;
float m_Score;
};
void setPlayer(vector& v)
{
for (int i = 0; i < 5; i++)
{
string nameSeed = "ABCDE";
string name = "选手";
name += nameSeed[i];
float score = 0;
Person p(name, score);
v.push_back(p);
}
cout << endl;
}
void setPlayer(list& L)
{
for (int i = 0; i < 5; i++)
{
string nameSeed = "FGHIJ";
string name = "选手";
name += nameSeed[i];
float score = float(i*10+10);
Person p(name, score);
L.push_back(p);
}
for (list::iterator it = L.begin(); it != L.end(); it++)
{
cout << (*it).m_Name << " " << "分数 " << setiosflags(ios::fixed) << setprecision(1)<< (*it).m_Score << endl;
}
cout << endl;
}
void setScore(vector& v)
{
for (vector::iterator it = v.begin(); it != v.end(); it++)
{
deque<float> d1;
cout << "给" << (*it).m_Name << "打分结果: ";
for (int i = 0; i < 10; i++)
{
float ret = rand() % 4 + 6 + rand()/(double)(RAND_MAX);
d1.push_back(ret);
cout << setiosflags(ios::fixed)<<setprecision(1)<< d1[i]<<" ";
}
cout << endl;
sort(d1.begin(), d1.end());
d1.pop_front();
d1.pop_back();
float avg;
float sum = 0;
cout << "处理后的分数-" << (*it).m_Name << ": ";
for (int i = 0; i < d1.size(); i++)
{
sum += d1[i];
cout << setprecision(1)<" ";
}
cout << endl;
avg = float(sum / d1.size());
(*it).m_Score = avg;
cout << "平均分 " << setprecision(1)<<(*it).m_Score << endl;
}
cout << endl;
}
bool myCompare(Person& p1, Person& p2)
{
return p1.m_Score < p2.m_Score;
}
int main()
{
srand(time(NULL));
vector v1;
list L;
setPlayer(v1);
setPlayer(L);
setScore(v1);
sort(v1.begin(), v1.end(), myCompare);
cout << "按得分排序:" << endl;
for (int i = 0; i < v1.size(); i++)
{
cout << v1[i].m_Name<<": "<< setprecision(1)<< v1[i].m_Score << endl;
}
cout << endl<<"冠军是:"<for (int i = 0; i < 5; i++)
{
{
if (v1[i].m_Score == v1[4].m_Score)
cout << v1[i].m_Name << " " << setprecision(1) << v1[i].m_Score << " " << endl << endl; }
}
list L;
Person p("选手H", 30);
auto it1 = L.begin();
//for (int i = 0, j = L.size(); i < j; i++)
{
Person person = *it1;
if(person == p)
{
L.erase(it1);
}
else it1++;
}
for (list::iterator it1 = L.begin(); it1 != L.end(); it1++)
{
cout << (*it1).m_Name << " " << (*it1).m_Score << endl;
}
system("pause");
return 0;
}
103行127行重定义L了。
for那块修改下,
// list<Person> L;
Person p("选手H", 30);
auto it1 = L.begin(); // auto it1 = L.begin();
// for (int i = 0, j = L.size(); i < j; i++)
for (auto it2 = L.begin(); it2 != L.end();)
{
// Person person = *it1;
if (*it2 == p) // if (person == p)
{
L.erase(it2);
it2 = it1; // 删除后,从前一个位置重新遍历
}
else
{
it1 = it2;
it2++;
}
}
L重定义了,注释掉127行
http://www.cplusplus.com/reference/list/list/merge/
我需要您提供您的List代码和测试代码才能确定您的语法错误所在。请您确保您已经使用正确的语法来声明和使用List,例如使用正确的头文件,并使用正确的迭代器来遍历List。如果您的代码托管在GitHub或其他版本控制系统上,您可以向我提供该代码仓库的链接,以便我查看更多细节并提供更具体的建议。如果您无法提供代码,我将无法提供实际可行的解决方案。