迭代器《C++ primer》第三章迭代器问题,预期与实际程序结果不符,求高手指教
题目:
读一组整数到 vector 对象,计算并输出每对相邻元素的
和。如果读入元素个数为奇数,则提示用户最后一个元素
没有求和,并输出其值。然后修改程序:头尾元素两两配
对 (第一个和最后一个, 第二个和倒数第二个, 以此类推) ,
计算每对元素的和,并输出。
[code=C/C++][/code]#include<iostream>
#include <vector>
using namespace std;
using std::vector;
int main(){
vector<int> ivec;
int i;
while(cin>>i){//为容器添加元素
ivec.push_back(i);
}
vector<int>::size_type j=0;
for (j=0;j!=ivec.size();j++)
{
cout<<ivec[j]<<" "<<ivec.size()<<endl;
}
if (ivec.size()%2)//输入个数为奇数
{
cout<<"the number is odd"<<endl;
for (j=0;j<(ivec.size()-1);++j)
{
cout<<ivec[j]+ivec[++j]<<endl;
}
}
else{//输入个数为偶数
for (j=0;j!=ivec.size();++j)
{
cout<<ivec[j]+ivec[++j]<<endl;
}
}
return 0;
}
下面是程序输入:
1
2
3
4
5
adf
结果输出:
1 5
2 5
3 5
4 5
5 5
the number is odd
4
8
为什么结果要比预期大1呢???
[解决办法]
把你的cout<<ivec[j]+ivec[++j]<<endl 改成cout<<ivec[j]+ivec[j++]<<endl吧
[解决办法]
压栈顺序通常与编译器有关。。通常都是从右到左。
__pascal声明后就是从左到右