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

一个名字

我想在上运行循环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++)将是一个很好的解决方案,不是吗?

谢谢。

任务

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

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

通常,实现只允许执行那些不会更改可观察行为的代码转换这称为“假设规则”

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在循环中更改条件,但仅在第一次迭代之后?

for循环仅在第一次迭代时执行

whilef循环中的scanf仅在第一次迭代时读取

laravel在foreach循环中使用if条件时检查foreach循环的最后一次迭代

是否有一种干净的方法可以仅在第一次迭代时或在执行之前检查循环中的变量?

在forEach循环中跳过第一次迭代

数组仅在for循环的第一次迭代时更新

“ For”循环第一次迭代

在第一次迭代中使用while停止循环

跳过循环中的第一步进行第一次迭代

嵌套 Do While 内循环仅在外循环的第一次迭代时运行

为什么在第一次迭代后此循环中断?

$.each 循环中的 jQuery UI 自动完成不显示第一次迭代的结果

如何仅在循环的第一次迭代中插入字符串?

仅在xsl:for-each循环的第一次迭代中添加xsl:param

检查地图是否第一次迭代的方法

While 循环在第一次迭代后停止

While 循环在第一次迭代后中断

我循环只经过第一次迭代

For循环在第一次迭代后停止

循环在第一次迭代后停止吗?

第一次迭代后中断循环

For 循环在第一次迭代后结束

检查while循环是否在C#中的第一次迭代中

每次调用一个函数时如何在循环中迭代一次?

基于Java中的第一次迭代变量分组的嵌套循环的元件

如何为while循环的第一次迭代设置PHP变量?

脚本循环遍历第一次迭代中被变量卡住的文件中的哈希表

为什么Jenkinsfile中的每个循环在第一次迭代时停止