C++ 列表不工作
c++ list isn't working
我认为问题是因为 jt 迭代器,当我从列表中删除一个元素时,我不知道确切原因,但我很确定 v.end() 正在改变并且我的迭代器是跳过它。顺便说一句,我正在按降序对列表进行排序。
#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
在下一次迭代中做了一些不好的事情。
我认为问题是因为 jt 迭代器,当我从列表中删除一个元素时,我不知道确切原因,但我很确定 v.end() 正在改变并且我的迭代器是跳过它。顺便说一句,我正在按降序对列表进行排序。
#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
在下一次迭代中做了一些不好的事情。