C++ primer上习题,求更好的解决办法。
有关于vector容器的问题,我刚看。下面是问题的具体描述。
读一组数到vector对象,计算并输出每对相邻元素的和。如果读入元素的个数为奇数,则提示用户最后一个元素没有求和,并输出其值。
下面是我自己的代码。感觉太麻烦了,希望有好的意见,或者好的代码。
#include<iostream>#include<string>#include<vector>using namespace std;void main(){ int temp; int sum; vector<int> ivec; while(cin>>temp) { ivec.push_back(temp); if(temp==-1) break; } if(ivec.size()%2==0) { //cout<<"最后一个元素未被求和"<<endl; //cout<<"输出的最后1个值即为最后1个元素的值"<<endl; cout<<"相邻两元素的值为:"<<endl; for(vector<int>::size_type ix=0;ix!=ivec.size();ix+=2) { sum=0; sum=ivec[ix]+ivec[ix+1]; cout<<sum<<" "; } } else { cout<<"最后一个元素未被求和"<<endl; cout<<"输出的最后1个值即为最后1个元素的值"<<endl; cout<<"相邻两元素的值为:"<<endl; for(vector<int>::size_type ix=0;ix!=ivec.size()-1;ix+=2) { sum=0; sum=ivec[ix]+ivec[ix+1]; cout<<sum<<" "; } cout<<ivec[ivec.size()-1]; } cout<<endl;}#include<iostream>#include<vector>using namespace std;void main(){ int temp; vector<int> ivec; vector<int>::size_type ix; while(cin>>temp) { if(temp==-1) // 判断放在前面,避免将-1存入ivec中。 break; ivec.push_back(temp); } if (ivec.size()>0) { cout<<endl<<"相邻两元素的值为:"<<endl; for (ix=0;ix<ivec.size()-1;ix+=2) cout<<ivec[ix]+ivec[ix+1]<<" "; if (ix<ivec.size()) cout<<endl<<"最后一个元素未被求和,其值为:"<<ivec[ix]<<endl; }}
[解决办法]
#include<iostream>#include<string>#include<vector>using namespace std;void main(){ int temp; int sum; vector<int> ivec; while(cin>>temp) { if(temp==-1) break; ivec.push_back(temp); } cout<<"相邻两元素的值为:"<<endl; for(vector<int>::size_type ix=0;ix < ivec.size()-1;ix+=2) { sum=0; sum=ivec[ix]+ivec[ix+1]; cout<<sum<<" "; } if(ivec.size()%2 != 0) { cout<<"最后一个元素未被求和"<<endl; cout<<"输出的最后1个值即为最后1个元素的值"<<endl; cout<<ivec[ivec.size()-1]; } cout<<endl;}