c ++编译器是否处理像建筑物是矢量的情况:
for (int i = 0; i < buildings.size(); i++) {}
Run Code Online (Sandbox Code Playgroud)
也就是说,它是否注意到是否在循环中修改了建筑物,然后根据每次迭代不评估它?或者也许我应该自己做,不是那么漂亮,但是:
int n = buildings.size();
for (int i = 0; i < n; i++) {}
Run Code Online (Sandbox Code Playgroud)
Tim*_*lds 12
buildings.size()编译器可能会内联直接访问vector<T>类上的私有大小字段.所以你不应该把电话分开size.无论如何,这种微优化都是你不想担心的事情(除非你通过分析确定为一个非常紧密的循环瓶颈).
不要通过考虑表现来决定是否选择其中一个; 您的编译器可能会或可能不会内联调用 - 并且std::vector::size()也具有不变的复杂性.
您应该考虑的是正确性,因为如果在迭代时添加或删除元素,则两个版本的行为会有很大差异.
如果不在循环中以任何方式修改向量,请坚持使用前一版本以避免一点状态(n变量).
| 归档时间: |
|
| 查看次数: |
2265 次 |
| 最近记录: |