永发信息网

c++语言 list的使用出错 触发断点

答案:2  悬赏:10  手机版
解决时间 2021-07-29 06:43
  • 提问者网友:半生酒醒
  • 2021-07-28 06:32
#include"iostream"
#include"list"
using namespace std;
bool check(list<int>&lst);
int main()
{
list<int> lst;
lst.push_front(10);
lst.push_front(15);
lst.push_front(18);
check(lst);
return 0;
}
bool check(list<int>&lst) //实现功能;给出一组数 这些数相加减 若能等于1则返回true 否则 返回FALSE
{ //例如:(10,15,18)=18+18+18-10-15-15-15=1返回true;
list<int>::iterator il,i2;int t,min=lst.front(); //递归示例:
for(il=lst.begin ();il!=lst.end();il++) //check(10,15,18)=check(10,15%10,18%10)=check(10,5,8)
{ //=check(10%5,5,8%5)=check(0,5,3)=check(5,3)=check(2,3)=check(2,1)=check(0,1)=check(1)
if(*il<min) //仅剩下一个点且为1返回true;
{
min=*il;i2=il;
} //迭代找到最小值;
}
for(il=lst.begin ();il!=lst.end();il++)
{

if(il!=i2)
{
t=*il%min; //除最小值之外 都赋值为原数%最小值
if(t>0) *il=t; // 并用erase 删除(原数%最小值)=0的点;
else *lst.erase(il);
}
}
for(il=lst.begin ();il!=lst.end();il++) cout<<*il<<" "<<endl;
if(lst.size()==1)
{
if(lst.front()==1) return true; //如果链表中仅有一个点
else return false; // 此点值为1 则返回true
} // 若不为1 则返回false
return check(lst);
}
错误:触发一个断点
#ifdef _DEBUG
_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Debug_message(const wchar_t *message, const wchar_t *file, unsigned int line)
{ // report error and die
if(::_CrtDbgReportW(_CRT_ASSERT, file, line, NULL, message)==1)
{
::_CrtDbgBreak();
}
}
最佳答案
  • 五星知识达人网友:逐風
  • 2021-07-28 07:49

*lst.erase(il); 这个函数是又返回值的 将返回值再付给il


然后判断这时的il是否已经到end 如果这时已经是end了 那么 你在FOR 对il进行自加操作固然就要出错了



全部回答
  • 1楼网友:旧脸谱
  • 2021-07-28 08:24
程序算法没看懂 18+18+18-10-15-15-15=-1吧
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯