c++ 关于自增与解引用的问题

while(cin>>i)ivec.push_back(i);if(ivec.size()==0){cout<<"Nonumbers"<<endl;return-1;}f... while(cin>>i)
ivec.push_back(i);
if(ivec.size()==0){
cout<<"No numbers"<<endl;
return -1;
}
for(iter=ivec.begin();iter<ivec.end()-1;iter=iter+2)
cout<<*iter+*(iter+1)<<" "; \\ 这里把改成*(++iter)便得不到正确结果 为什么呢?
按我的理解,(++iter)和(iter+1)不是一样的嘛? 同样都是是迭代器指向下一个元素然后再解引用,为什么用自增就得不到正确结果??
展开
 我来答
提大刀砍鬼子
2012-08-12 · TA获得超过106个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:76.2万
展开全部
这个(iter+1)比较明确,就不需要解释了。至于(++iter)呢,其实效果就是iter先加+再运算,也是没有错。但是问题就在于你是cout<<*iter+*(iter+1)<<" ";l了,我用的是vc6.0,这个编译器输入输出是采用的压栈式,那么在代码执行的时候由于压栈的原因会先计算(++iter)然后再计算iter(可以简单的理解为计算方向是与代码相反的方向),也就是说现在的iter都已经指向了下一个元素,就是你的这个加法其实就是加的两个iter指向的下一个元素。不同编译器有不同的解释,具体看情况。建议你可以用简单的前置++后置++还有混合括号的形式具体测试一下编译器的情况。

希望有帮助。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Bk0X
2012-08-12 · TA获得超过9413个赞
知道小有建树答主
回答量:1217
采纳率:60%
帮助的人:668万
展开全部
看如下.

int N = 1;
int X = (N+1); // X等于2吧?, N等于1.

再看.
int N = 1;
int X = (++N); // X同样等于2, 但是N也变成了2.

N+1 和 ++N的返回值一样, 都是2, 但是前者不改变自身而后者改变自身.

*iter+*(iter+1) // 这里你期望的是iter的值加上iter下一个值. 计算之后iter依然指向第一个值的位置
*iter+*(++iter) // 这里结果输出一样, 但是iter被向前推进了1位, 加上循环末的iter = iter+2
// 一次循环iter就被推进3个位置.
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
e_ano
2012-08-12 · 贡献了超过115个回答
知道答主
回答量:115
采纳率:0%
帮助的人:108万
展开全部
完全不一样好吧,一个是先加再用。另一个是先用再加
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式