【问题标题】:What does this cycle do?What is the point? [closed]这个循环有什么作用?有什么意义? [关闭]
【发布时间】:2020-11-07 19:59:49
【问题描述】:
int myDrawOrder = sprite->GetDrawOrder();
auto iter = mSprites.begin();
for(;iter != mSprites.end(); ++iter)
{
    if(myDrawOrder < (*iter)->GetDrawOrder()) //what does this line mean?
    {
        break;
    }
}

GetDrawOrder() 返回精灵在队列中的位置。

【问题讨论】:

  • 该行检查myDrawOrder 是否小于(*iter)-&gt;GetDrawOrder()
  • 看起来循环在列表中找到了一个点,大概按GetDrawOrder排序,可以在保持该顺序的同时插入sprite
  • 这会将iter 设置为第一个绘制顺序大于myDrawOrder 的精灵,如果没有这样的精灵,则设置为mSprites.end()。看看循环后iter是怎么用的。
  • cmets中的三个答案????‍♂️
  • 是的,我明白了。Th

标签: c++ sdl sdl-image


【解决方案1】:

循环遍历精灵和breaks,当它发现应该在sprite 之前绘制的恶意。你没有分享其余的代码,但大概是用那个精灵做了一些事情(例如,它被绘制了)。

【讨论】:

    【解决方案2】:

    由于iter 不是循环的本地,它在循环的之后 指向myDrawOrder &lt; (*iter)-&gt;GetDrawOrder() 为真的第一个元素(或mySprites.end(),如果没有) .

    这是一个搜索操作。

    也可以这样写:

    const int myDrawOrder = sprite->GetDrawOrder();
    auto iter = std::find_if(
       std::begin(mSprites),
       std::end(mSprites),
       [&](const auto& sprite) {
          return sprite.GetDrawOrder() >= myDrawOrder;
       }
    );
    

    【讨论】:

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