i++和++i用在for循环语句中有什么区别?

iBuffer 2003-05-30 04:19:18
我最近看c++primer这本书里对vector、list、map进行遍历时的for循环有用++i的,在msdn中也时这么用的。可是我把++i改成i++后出来的结果是一样的。不知道在for循环中两者有什么区别?
...全文
1380 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
ch_builder 2003-05-31
  • 打赏
  • 举报
回复
楼上兄弟们说得都很对,++i与i++谁在前第一次用时就先返回谁,而且两者在同一个程序中,i++的值总会比++i的值小1。
gzqreder 2003-05-31
  • 打赏
  • 举报
回复
哪个在前面就返回哪个
++i返回i+1,i++返回i
robertnet 2003-05-31
  • 打赏
  • 举报
回复
++i 与 i++ 不存在效率问题,关键看你怎么用。
DanielWYO 2003-05-31
  • 打赏
  • 举报
回复
++i 效率是会高一点的.

另外, B.S的经验谈也是认为尽量不要使用i++
iBuffer 2003-05-31
  • 打赏
  • 举报
回复
多谢大家,没想到这俩个东东有这么多说道。
senkiner 2003-05-31
  • 打赏
  • 举报
回复
看这两个代码有和区别:

//1:
for(i=0;i<5;i++)
{
cout << i << endl;
}
cout << "--------\n" << i << endl;

//2:
for(i=0;i<5;++i)
{
cout << i << endl;
}
cout << "--------\n" << i << endl;
hydra1101 2003-05-30
  • 打赏
  • 举报
回复
另外如果i是一个类的话,++i也许效率会高一些,我们公司的技术主管对这件事指出来过,不过他说的是我们自己的类库,对++i做了优化,他告诉我,没有特殊的情况,用++i而不是i++。
Cypher 2003-05-30
  • 打赏
  • 举报
回复
楼上有人说对了,也有人说错了,这两个用在for循环中效果是相同的,效率取决于i的类型,如果是int等内置类型,没什么错误,但对于用户自定义类型重载的++如最常见的iterator则++i效率要高一些。
hydra1101 2003-05-30
  • 打赏
  • 举报
回复
for中几乎没有区别,因为它的执行顺序for(partA;partB;partC)

首先partA

然后每次循环之前先partB
循环之后partC

区别在于partC可能是多条语句,例如:for(int i=0;i<10;++i,a=i)---〉这种写法不规范,所以也没有必要知道啦
wanchl 2003-05-30
  • 打赏
  • 举报
回复
++i是先加1再参加运算,而i++是先运算再加1
xzygod 2003-05-30
  • 打赏
  • 举报
回复
运算中i++比++i多产生一个临时对象,从效率的角度说,应用++i代替i++
egyptnile 2003-05-30
  • 打赏
  • 举报
回复
no difference
georgepcb 2003-05-30
  • 打赏
  • 举报
回复
对于for循环,++i和i++没有区别。
xuanyuanhaobo 2003-05-30
  • 打赏
  • 举报
回复
在for的第三项里面无区别~~

for (int i = 0; i < n; i++)
{
...
}


for (int i = 0; i < n; ++i)
{
...
}

for (int i = 0; i < n;)
{
...
i++;(++i)_
}

无区别




hyifeng 2003-05-30
  • 打赏
  • 举报
回复
如果你用的是支持随机存储的容器如vector,string...
++iterator应该和iterator++是没有区别的,
因为通常迭代器简单实现为普通指针。
但是,如list,map,set等容器,iterator就没有这么简单了,
++iterator效率高于iterator++,因为省了一个临时对象。
Eagle_118 2003-05-30
  • 打赏
  • 举报
回复
++i和i++在for循环中的区别是++i比i++的运算在一般情况下要快一点。
如果你重载过这两个运算符,这不难理解为什么!
skywarship 2003-05-30
  • 打赏
  • 举报
回复
++i和i++本身是有区别的,但如果用在for语句中就不存在任何区别了

for(...;...;i++/++i)
{...}

相当于

while(...)
{i++/++i;}

black_fox 2003-05-30
  • 打赏
  • 举报
回复
不好意思。我说的无区别是指在他用的例子中无区别,并不是说++i和i++这两种操作无区别。大家别拍我
black_fox 2003-05-30
  • 打赏
  • 举报
回复
无区别,但是可能效率会不一样。实现可能如此:

class CTemp
{
public:

CTemp():i(0)
{
}
CTemp operator ++ (int) //i++调用这个
{
CTemp tmp(*this);

i++;

return tmp;


}
CTemp & operator ++() //++i调用这个
{

i++;
return *this;
}
// operator int const (){ return i; }

virtual ShowInfo()
{
CString strMsg;
strMsg.Format("i = %d",i);
AfxMessageBox(strMsg);

}
protected:
int i ;
private:

};
实际上++i可能比i++要块一点,当然,编译器不知道会不会做这种优化。
xueyanchao 2003-05-30
  • 打赏
  • 举报
回复
i++和++i的区别是这样的
#include <iostream.h>
void main()
{
int i=3,j=3;
cout<<++i; //OUT: 4
cout<<j++; //OUT: 3
cout<<i; //OUT: 4;
cout<<j; //OUT: 4;
}
明白了吗?
加载更多回复(2)

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧