例如:    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有什么编译选项是可以优化这个比较变量的?

解决方案 »

  1.   

    不会优化,因为你在for里面有可能改变v,比如增加或删除元素,这样v.end()就变了。
      

  2.   

    "先计算出来,放到一个临时变量里面"vector.end  其实是获取一个成员变量, 函数会被优化成内联, 跟上面的方法效率没多大差别
      

  3.   

    直接用下标和长度判断比用迭代器要快很多,不信你弄一千甚至是一万个进vector然后遍历,计算时间试一下。不过迭代器还是要学的,毕竟这是STL容器通用的
      

  4.   

    v.end() 其实是返回类的一个end的iter罢了.
      

  5.   

    不会优化,建议用std::for_each