看C++ PRIMER遇到的问题(问了N多人居然没人会郁闷!!!!!!!!!
在WHILE为什么一定用后++输出啊前++i为什么不能输出向量的第一项而在FOR循环中两者都可以用呢?比如:vector<int>::iteratoriter=ivec....
在WHILE为什么一定用后++输出啊前++i为什么不能输出向量的第一项而在FOR循环中两者都可以用呢?
比如:
vector<int>::iterator iter=ivec.begin();
while(iter!=ivec.end())
cout<<*iter++<<endl;
你说的WHILE很明白了可是如果在FOR中为什么可以用前++也可以后++比如:for(iter=ivec.begin();iter!=ivec.end();++iter)
或者for(iter=ivec.begin();iter!=ivec.end(),iter++)那个前++不是输出的第一项第2个向量吗????而后++输出的第一项才是向量的第2项啊(按照WHILE的理解)??????? 展开
比如:
vector<int>::iterator iter=ivec.begin();
while(iter!=ivec.end())
cout<<*iter++<<endl;
你说的WHILE很明白了可是如果在FOR中为什么可以用前++也可以后++比如:for(iter=ivec.begin();iter!=ivec.end();++iter)
或者for(iter=ivec.begin();iter!=ivec.end(),iter++)那个前++不是输出的第一项第2个向量吗????而后++输出的第一项才是向量的第2项啊(按照WHILE的理解)??????? 展开
1个回答
展开全部
我在此先说明一下for循环的工作原理,楼主如果还是不明白不妨照着画个流程图就清楚了
一个标准的for循环格式如下
for (初始化语句;循环条件;循环累进语句) 循环体;
运作的时候,运行格式类似于这样
初始化语句
begin_of_loop: if (循环条件)
{
循环体
循环累进语句
goto begin_of_loop
}
将这个格式套入到楼主的实例中,不管累进的时候是前++还是后,都不需要调用到累进语句的返回值
这个循环的最初几步如下:
iter=ivec.begin();
此时iter!=ivec.end(),并且iter指向了ivec的第一项,执行循环体
cout<<*iter<<endl;//输出了第一项
++iter;
此时iter指向了ivec的第二项,iter!=ivec.end()(假设ivec有很多项),执行循环体
cout<<*iter<<endl;//输出了第二项
++iter;
此时iter指向了第三项……
……
你注意一下,在这里,无论累进的时候是前++还是后++,都没有用到累进语句的返回值,累进语句的作用仅仅是把iter向后挪一位;既然不需要用到它的返回值,那么前++和后++对于这几个语句来说作用是完全一样的。输出的时候是否输出第一位还是取决于第一次循环中执行到cout的时候iter指向哪里,和累进语句怎么写无关
关键在于前++和后++的区别
虽然两个都表示累进,但是返回值是不一样的
++a返回的是变量a累进后的值,而a++返回的是累进之前的值
在楼主的实例中,第一次进入while循环时,iter指向的是第一项
如果执行cout<<*(++iter),就会先将iter向后移一位指向第二项,然后返回第二项
如果是cout<<*iter++,就会先记录要返回的是第一项,然后累进iter,然后将之前记录的第一项返回
而在for循环中,应该是写成这样的格式
for (iter=ivec.begin();iter!=ivec.end();iter++)
cout<<*iter<<endl;
这个循环等效于如下一段代码
iter=ivec.begin();
while (iter!=ivec.end())
{
cout<<*iter<<endl;
iter++;
}
这样,相信楼主能够看明白,无论是前++还是后++,都与cout里面那句的返回值无关了
事实上,所有的for(AAA;BBB;CCC) DDD;都可以被写作
AAA;
while (BBB)
{
DDD;
CCC;
}
一个标准的for循环格式如下
for (初始化语句;循环条件;循环累进语句) 循环体;
运作的时候,运行格式类似于这样
初始化语句
begin_of_loop: if (循环条件)
{
循环体
循环累进语句
goto begin_of_loop
}
将这个格式套入到楼主的实例中,不管累进的时候是前++还是后,都不需要调用到累进语句的返回值
这个循环的最初几步如下:
iter=ivec.begin();
此时iter!=ivec.end(),并且iter指向了ivec的第一项,执行循环体
cout<<*iter<<endl;//输出了第一项
++iter;
此时iter指向了ivec的第二项,iter!=ivec.end()(假设ivec有很多项),执行循环体
cout<<*iter<<endl;//输出了第二项
++iter;
此时iter指向了第三项……
……
你注意一下,在这里,无论累进的时候是前++还是后++,都没有用到累进语句的返回值,累进语句的作用仅仅是把iter向后挪一位;既然不需要用到它的返回值,那么前++和后++对于这几个语句来说作用是完全一样的。输出的时候是否输出第一位还是取决于第一次循环中执行到cout的时候iter指向哪里,和累进语句怎么写无关
关键在于前++和后++的区别
虽然两个都表示累进,但是返回值是不一样的
++a返回的是变量a累进后的值,而a++返回的是累进之前的值
在楼主的实例中,第一次进入while循环时,iter指向的是第一项
如果执行cout<<*(++iter),就会先将iter向后移一位指向第二项,然后返回第二项
如果是cout<<*iter++,就会先记录要返回的是第一项,然后累进iter,然后将之前记录的第一项返回
而在for循环中,应该是写成这样的格式
for (iter=ivec.begin();iter!=ivec.end();iter++)
cout<<*iter<<endl;
这个循环等效于如下一段代码
iter=ivec.begin();
while (iter!=ivec.end())
{
cout<<*iter<<endl;
iter++;
}
这样,相信楼主能够看明白,无论是前++还是后++,都与cout里面那句的返回值无关了
事实上,所有的for(AAA;BBB;CCC) DDD;都可以被写作
AAA;
while (BBB)
{
DDD;
CCC;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询