为什么这个for循环需要这么长时间?

Sir*_*lot -6 c++

for循环:

//for testing, this is usually a value of about 27
int test = level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice].size();

for (int i = 0; i < level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice].size(); i++)
{
    //adds the correct nodes to the search
    search.push_back(level.Nodes()[level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice][i]].Index());
}
Run Code Online (Sandbox Code Playgroud)

它是一个64位系统.

我在调试时得到整数'i'的非常奇怪的结果.它应该初始化为0,但由于某种原因,它是一个非常高的数字,这反过来意味着for循环没有执行.

Joh*_*ing 6

编辑 - 只是更改它,以便它只是一个int,现在它获得值-82938723047或一些这样的数字.为什么发生这种情况呢?它破坏了我的计划!

你几乎肯定会吠叫错误的树.代码:

for (int i = 0; 
Run Code Online (Sandbox Code Playgroud)

...初始化i0,期间.如果你想在调试器来监视其价值和调试器说i有,看起来像未初始化,垃圾数据的值,那么你可能在看i之前或之后i已进入范围和被初始化.例如,在MSVC中,如果i在第一次进入循环之前检查,它通常会有垃圾数据.

这些不是您正在寻找的机器人.向前走.

这个代码更有可能是:

level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice].size()
Run Code Online (Sandbox Code Playgroud)

这可能不是你认为它正在做的事情.

顺便说一句,如果类型level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice]vector某种类型,我宁愿你使用这样for构造的循环.

/*psudocode*/ for( vector::iterator it = v.begin(), it_end = v.end(); it != it_end; ++it )
Run Code Online (Sandbox Code Playgroud)

如果您不需要您尝试访问的元素的索引,那么为什么要引用它?您只是在代码中引入了另一个潜在的失败点.