+ -
当前位置:首页 → 问答吧 → c++循环写法与效率问题

c++循环写法与效率问题

时间:2011-08-08

来源:互联网

(1)for(int i=0;i<=n-1;i++){...}与for(int i=0;i<n;i++){...}效率相同吗?编译器会自动优化吗?
(2)对于vector类型变量vec,那么
for(int i=0;i<(int)vec.size();i++){...}

int n=vec.size();
for(int i=0;i<n;i++){...}
效率相同吗?编译器会自动优化吗?

作者: iwantnon   发布时间: 2011-08-08

比较条件是从标志寄存器获取结果的,虽然和cpu的实现有关,但是我认为这样的优化没有考虑的价值,如果计算次数确实很多,可以考虑内联汇编。但是优化最好的角度往往是从方法角度上考虑的,而不是命令形式。
对于第二个里面那个一直调用size(),每次得到的值都不一样,不知道那个逻辑上是想干什么。

作者: ga6840   发布时间: 2011-08-08

建议lz看看 
林瑞的高质量C/C++编程

作者: dizuo   发布时间: 2011-08-08

引用 1 楼 ga6840 的回复:
对于第二个里面那个一直调用size(),每次得到的值都不一样,不知道那个逻辑上是想干什么。

怎么不一样,一样吧。

作者: iwantnon   发布时间: 2011-08-08

引用 2 楼 dizuo 的回复:
建议lz看看
林瑞的高质量C/C++编程

下载了,我看看:)

作者: iwantnon   发布时间: 2011-08-08

引用 3 楼 iwantnon 的回复:

引用 1 楼 ga6840 的回复:
对于第二个里面那个一直调用size(),每次得到的值都不一样,不知道那个逻辑上是想干什么。

怎么不一样,一样吧。

这个肯定要依据具体情况而定啊,假如你循环了对vector进行了插入删除操作,.size()得到的值肯定不一样嘛。

作者: mkcing   发布时间: 2011-08-08

我觉得(1)二者效率必然一样。。因为比较对象非0时,总要一个cmp然后jx指令,jx指令是<和<=都有

作者: cfvmario   发布时间: 2011-08-08