C++ List 这段编码为啥通不过


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行

img

  • 这篇文章讲的很详细,请看:C++ list 使用方法
  • 除此之外, 这篇博客: C++ List的使用中的 参考 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • http://www.cplusplus.com/reference/list/list/merge/

  • 以下回答由chatgpt基于相关博客总结生成:

    我需要您提供您的List代码和测试代码才能确定您的语法错误所在。请您确保您已经使用正确的语法来声明和使用List,例如使用正确的头文件,并使用正确的迭代器来遍历List。如果您的代码托管在GitHub或其他版本控制系统上,您可以向我提供该代码仓库的链接,以便我查看更多细节并提供更具体的建议。如果您无法提供代码,我将无法提供实际可行的解决方案。