我想在上运行循环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] 删除。
我来说两句