程序运行时出错:
//******************************
//** Josephus问题解法六 **
//** jose6.cpp **
//******************************
#include <iostream>
#include <iomanip>
#include <list>
using namespace std;
void Step(int m);
void Init(int);
list <int> josephus; //创建单向链表模板类的全局对象
list<int>::iterator prev; //创建josephus迭代算子
list<int>::iterator iter; //创建josephus迭代算子
int main()
{
int n=10, s=1, m=3; //随取三个合理的整数
Init(n);
iter=josephus.end();
Step(s);
for(int i=1; i<n; i++){
Step(m);
cout << *iter << " ";
//iter=prev;
int t=*iter;
josephus.remove(t);
}
cout <<"\nThe winner is "<<*iter << endl;
return 0;
}
//以下是构造链表,初始化小孩编号的函数
void Init(int n)
{
for(int i=1; i<n; i++){
josephus.push_back(i);
}
list<int>::iterator it=josephus.begin(); //创建josephus迭代算子
while (it != josephus.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
//以下是要将指针从当前位置挪到往下数第m个小孩的位置
void Step(int m)
{
for(int i=0; i<m; i++){
prev=iter;
iter++; //第三次进入时,出错:access violation
if(iter==josephus.end())
iter=josephus.begin();
}
}