points

caixueping 2011-07-01 01:53:28
vector<int> vec;
int i;
while(cin >> i && i != -1)
{
vec.push_back(i);
}
vector<int>::iterator it = vec.begin();
while (it != vec.end())
{
*it = (*it++) * 2;

}
//while (it != vec.end())
{
*it = *it * 2;
++it;

}
为啥这两个循环不一样呢?可否解释下。。//*it = (*it++) * 2 ::
*it = *it * 2;
++it;
...全文
78 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
caixueping 2011-07-01
  • 打赏
  • 举报
回复
*it = (*it++) * 2;
这个赋值操作是赋it 的下一个元素。。。因为 = 的优先级比 ++ 低~~~ 谢谢大家
TimZhuFaith 2011-07-01
  • 打赏
  • 举报
回复
不一样,测试数据问题
TimZhuFaith 2011-07-01
  • 打赏
  • 举报
回复
vc6倒是不越界,但是运行结果和下面的一样,vs 2010express越界[Quote=引用 6 楼 chenph_210 的回复:]
访问越界。程序coredump

C/C++ code


//为啥这两个循环不一样呢?可否解释下。。//*it = (*it++) * 2 ::
//*it = *it * 2;
//++it

#include <iostream>
#include <vector>
using namespace std;

int main()
{
vector<in……
[/Quote]
chengzhe 2011-07-01
  • 打赏
  • 举报
回复
理论上应该是一样的呀 , 但是一般都是再用第二种耶
鸟辉 2011-07-01
  • 打赏
  • 举报
回复

访问越界。程序coredump

//为啥这两个循环不一样呢?可否解释下。。//*it = (*it++) * 2 ::
//*it = *it * 2;
//++it

#include <iostream>
#include <vector>
using namespace std;

int main()
{
vector<int> vec;
int i;
while(cin >> i && i != -1)
{
vec.push_back(i);
}
vector<int>::iterator it = vec.begin();
while (it != vec.end())
{
*it = (*it++) * 2; //这块it++自加后,左边的it会跟着改变,所以在最后一次循环的时候,左边it自加。右边越界

}
//while (it != vec.end())
//{
// *it = *it * 2;
// ++it;

//}
for(it=vec.begin();it != vec.end();++it)
{
cout<<*it<<" "<<endl;
}

return 0;

}
TimZhuFaith 2011-07-01
  • 打赏
  • 举报
回复
*it++ = *it * 2 ;//这和下面那个一样
caixueping 2011-07-01
  • 打赏
  • 举报
回复
understanding:: just Operator precedence;
TimZhuFaith 2011-07-01
  • 打赏
  • 举报
回复
*it = (*it++) * 2 ;//等式右边 it++,此时it已经改变了,左边的it当然也改变了。k项的值乘以2 然后赋值给k+1项

*it = *it * 2;//先乘以2,再循环
++it;
caixueping 2011-07-01
  • 打赏
  • 举报
回复
while (it != vec.end())
{
*it = (*it++) * 2;

}
error......
ryfdizuo 2011-07-01
  • 打赏
  • 举报
回复
*it = (*it++) * 2;
执行完左边it++,最终被赋值的是下一个point

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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