关于c++中iterator进行遍历与普通的for循环进行遍历的疑问

vector<int> vec[1111];

void DFS(int i)
{
visit[i]=1;
vector<int>::iterator it;
for(it=vec[i].begin();it!=vec[i].end();it++)
if(visit[*it]==0)
DFS(*it);
/*
for(int i=1;i<=P;i++)
{
if(visit[i]==0)
{
DFS(i);
}
}
}

这是我代码中抽出来的一部分,我使用iterator进行遍历时正确的,使用简单的for循环是错误的,
这里的visit[]数组是标记无向图中的顶点是否被访问过 P是顶点数目

我的这个dfs想实现的是 判断这个无向图是否为欧拉图(还未判断奇点)

第1个回答  2014-04-07
// 你的 i 变量是形参呀,这个 DFS 函数就是去遍历 vec[i] 这个数组的,修改如下
int nLen = vec[i].size();
for (int j = 0; j < nLen; j ++)
{
    if (visit[vec[i][j]] == 0)
    {
        DFS(vec[i][j]);
    }
}

本回答被提问者和网友采纳
第2个回答  2014-03-25
其实很简单,就是循环次数的问题,用int i 可能会导致索引超出int 的表示范围,从而导致错误!而使用迭代器就不会产生这样的问题了!
第3个回答  2014-03-25
你可以输出调试信息,或者写日志看看为什么不一样