hur.cn - 华软网

 热门搜索

C++是否自动优化for循环的比较语句?

  作者:未知    来源:网络    更新时间:2011/8/17
例如:
C++">
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    for( vector<int>::iterator it = v.begin();
        it != v.end();
        ++ it ){
        printf("hw\n");
    }

每次for循环一遍都要执行一次v.end()的计算。我想知道,既然v在for的作用域里面是不变的,编译器会不会把v.end()先计算出来,放到一个临时变量里面,每次it和它比较就行了,而不用每次都调用函数。

C++标准是否有这方面的优化规定? 如果没有的话,VC有什么编译选项是可以优化这个比较变量的?
---华软 网友回答---
估计不会优化
---华软网友回复---
不会优化,因为你在for里面有可能改变v,比如增加或删除元素,这样v.end()就变了。
---华软网友回复---
"先计算出来,放到一个临时变量里面"

vector.end  其实是获取一个成员变量, 函数会被优化成内联, 跟上面的方法效率没多大差别
---华软网友回复---
直接用下标和长度判断比用迭代器要快很多,不信你弄一千甚至是一万个进vector然后遍历,计算时间试一下。不过迭代器还是要学的,毕竟这是STL容器通用的
---华软网友回复---
v.end() 其实是返回类的一个end的iter罢了.
---华软网友回复---
不会优化,建议用std::for_each      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。