关于STL::LIST的erase函数一个小问题

使用STL中的LIST来解决约瑟夫问题,好像其中的erase函数出了问题,哪位朋友帮忙给指点一下。我的编译环境是VC2005.#include<list>#include... 使用STL中的LIST来解决约瑟夫问题,好像其中的erase函数出了问题,哪位朋友帮忙给指点一下。
我的编译环境是VC2005.

#include<list>
#include<string>
#include<iostream>
using namespace std;

int main()
{
cout << "the original list is:" << endl;
list<string> name1; //存放原始序列
list<string> name2; //存放目标序列
name1.push_back("001");
name1.push_back("002");
name1.push_back("003");
name1.push_back("004");
name1.push_back("005");

list<string>::iterator current = name1.begin();

while( !name1.empty() )
{
//开始报数,如果报到表尾,则转到表头
for ( int i = 1; i < 2; i++)
if ( current == name1.end() )
current = name1.begin();
else
current++;

//将出列者放入到name2中,并将其从name1中删除
name2.push_back( *current );
current = name1.erase( current );
}

//输出结果序列
for ( current = name2.begin(); current != name2.end(); current++)
cout << *current << endl;
}
展开
 我来答
huya0002
2009-03-31 · TA获得超过968个赞
知道小有建树答主
回答量:2023
采纳率:0%
帮助的人:726万
展开全部
current = name1.erase( current );
比如这里 你erase了一个元素,但iterator没有更新,指向的还是删掉的那个元素,然后就出问题了
根小岩b
2009-03-31 · TA获得超过230个赞
知道小有建树答主
回答量:215
采纳率:100%
帮助的人:242万
展开全部
你的for语句都有问题。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式