C++ 列表不起作用

c++ list isn't working

本文关键字:不起作用 列表 C++      更新时间:2023-10-16

我认为问题是因为我从列表中删除元素时,我不知道为什么确切地知道为什么我的迭代器正在跳上它。顺便说一句,我正在按降序排序列表。

#include <fstream>
#include <list>
using namespace std;
ifstream fin("barci.in");
ofstream fout("barci.out");
int n,x,i,g,dif,ng,nd,k;
list <int> v;
list <int>::iterator it,jt;
bool cmp(int a, int b)
{
    return a>b;
}
int main()
{
    fin>>n>>g>>dif;
    for(i=0; i<n; i++)
    {
        fin>>x;
        v.push_back(x);
    }
    v.sort(cmp);
    /*for(it=v.begin(); it!=v.end(); it++)
        fout<<*it<<" ";*/
    for(it=v.begin(); it!=v.end(); )
    {
        ng=g-*it;
        nd=*it-dif;
        for(jt=++it; jt!=v.end(); jt++)
            if(*jt<=ng && *jt>=nd)
            {
                jt=v.erase(jt);
                break;
            }
        k++;
    }
    fout<<k;
    return 0;
}

如果当jt == it(循环中的第一轮)删除元素,则it将无效,无法递增。

然后jt=++it在下一个迭代中会做一些不好的事情。