注册 登录
编程论坛 C++教室

vector 中相关变量定义的问题

jkx08bener 发布于 2012-11-07 17:06, 970 次点击
读一组整数到vector对象,头尾元素两两配对,计算每对元素的和,并输出。如果读入元素为奇数个,则提示用户中间一个元素没有求和,并输出其值。(对于中间元素的处理老是出问题,怎么声明first和last比较好呢?自己的程序如下)
#include <iostream>
#include <vector>
using namespace std;
int main(){
    vector<int> ivec;
    int ival;
    cout<<"Enter numbers:"<<endl;
    while(cin>>ival)
        ivec.push_back(ival);
        if(ivec.size()==0){//计算首尾配对元素的和并输出
            cout<<"No element!"<<endl;
            return -1;
    }
    cout<<"Sum of each pair of counterpart elements in the vector:"<<endl;
    vector<int>::size_type cnt=0;
    vector<int>::size_type first=0;
    vector<int>::value_type last=0;
    for(vector<int>::size_type first=0,last=ivec.size()-1;first<last;++first,--last){
     cout<<ivec[first]+ivec[last]<<"\t";
     ++cnt;
     if(cnt%6==0)
         cout<<endl;
    }
    if(first==last)//提示居中元素没有求和
        cout<<endl
        <<"The center element is not been summed"<<"and its value is"<<ivec[first]<<endl;
    return 0;
}
怎么改才能让中间元素能正常符合题目显示呢?麻烦大家给与意见
8 回复
#2
JYIT2012-11-07 17:14
给出定义部分人家才看得懂撒!
#3
rjsp2012-11-08 10:51
将 for(vector<int>::size_type first=0, 中的 vector<int>::size_type 删掉

vector<int>::value_type last=0; 应该是 vector<int>::size_type last=0;
#4
mmmmmmmmmmmm2012-11-08 14:25
楼主 我也在看c++ primer 你问的是习题313吧 可以参考下偶的代码
程序代码:
#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
    vector<int> ivec;
    vector<int>::size_type num=0,i=0;
    int input;
    bool flag=false;
   
    while ( cin >> input )
    {
        ivec.push_back(input);
    }
    num=ivec.size();
   
    if ((num%2) == 0)
    {
        if ( num == 0 )
        {
            cout<<"no numbers!"<<endl;
            flag=true;
        }
        for (i = 0; i != (num/2) && (!flag) ; i++ )
        {
            cout<<ivec[i]+ivec[num-i-1]<<" ";
        }
    }
    else
    {

        if ( num == 1 )
        {
            cout<<"only one number: "<<ivec[0]<<endl;
            flag=true;
        }
        for (i = 0; i != (num/2) && (!flag) ; i++ )
        {
            cout<<ivec[i]+ivec[num-i-1]<<" ";
        }
        if ( !flag )
        {
            cout<<ivec[num/2]<<" The last number is middle of input numbers!";
        }
        
    }
   
    return 0;
}
#5
mmmmmmmmmmmm2012-11-08 14:44
楼主的代码是习题答案?
#6
lxqlyld2012-11-08 17:38
没看明白,帮顶一下
#7
jkx08bener2012-11-09 14:23
回复 4楼 mmmmmmmmmmmm
嗯,谢哈
#8
jkx08bener2012-11-09 14:25
回复 3楼 rjsp
嗯,太大意了
#9
jkx08bener2012-11-09 14:33
谢谢大家
1