【问题标题】:why is this for loop taking so long?为什么这个 for 循环要花这么长时间?
【发布时间】:2011-11-23 14:50:02
【问题描述】:

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());
}

它是一个 64 位系统。

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

【问题讨论】:

  • 不要向我们展示“本质上”的循环是什么——向我们展示实际的代码。
  • 其实是vector::size_type
  • 请注意,显示实际代码可能包含太多无关信息。需要的是minimal test case——一个完整、简洁的示例,可以重现问题。
  • 您更新的代码仍然没有显示问题。为什么test 相关?为什么会有i不好的印象?
  • @SirYakalot:你不能多次接近投票。我们无法提供帮助。你展示的循环不是错误的w.r.t。你的i 不好。我有兴趣提供帮助,但我不能;这不可能。所以你必须帮助我们,这样我们才能更好地帮助

标签: c++


【解决方案1】:

编辑 - 只是改变它,使它只是一个 int,现在它得到一个值 -82938723047 或一些这样的数字。为什么会发生这种情况? 它毁了我的程序!

你几乎肯定是找错了树。代码:

for (int i = 0; 

...将i 初始化为0,句号。如果你试图在调试器中窥探它的值并且调试器说i 有一个看起来像未初始化的垃圾数据的值,那么你可能在i 进入范围之前或之后查看i 并且被初始化。例如,在 MSVC 中,如果您在第一次进入循环之前检查 i,它通常会有垃圾数据。

这些不是您要寻找的机器人。继续前进。

更有可能是这段代码:

level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice].size()

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

顺便说一句,如果level.PathLookupVectors()[globalNodePositionIndex][globalNodeChoice] 的类型是某种vector,我希望您使用像这样构造的for 循环。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2011-12-07
    相关资源
    最近更新 更多