gpt4 book ai didi

c++ - 在 for 循环中,条件中使用的变量是在每次迭代时检查,还是仅在第一次迭代时检查?

转载 作者:太空狗 更新时间:2023-10-29 23:32:03 26 4
gpt4 key购买 nike

我想在 std::vector<std::vector<int>> array 上运行一个循环删除所需的元素。

我正在使用 for (i = 0; i < array.size(); i++)

调用array.erase()是否安全?从循环内?

在我的脑海里我假设for在每次迭代时检查 array.size() ,但也许它只在启动时执行一次。如果是,for (i = 0; i < &array.size(); i++)会是一个很好的解决方案,不是吗?

谢谢。

最佳答案

is it safe to invoke array.erase() from within the loop?

是的,它是绝对安全的。允许编译器通过仅在循环外调用一次 array.size() 来优化检查,前提是它可以证明 vector 在循环内没有被修改,例如,如果 vector 是常量因此不可修改。在那种情况下,以这种方式优化不会改变可观察到的行为。但是由于您在循环内调用 erase,因此不允许编译器仅调用一次 array.size()

一般来说,一个实现只允许进行那些不改变可观察行为的代码转换。这叫做 as-if rule .

关于c++ - 在 for 循环中,条件中使用的变量是在每次迭代时检查,还是仅在第一次迭代时检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55823364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com