C++primer5 题3.25

用下表运算符。。
这题要求有点多余,练习也就罢了,vector下标来做成绩分级计数就很不错了。。

我是通过创建一个数组(vector的影子),然后用数组给vector初始化来解决的

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
    unsigned grade=0,b[11]={},v=0;
    for(int i=1;i<11;++i)
    {

        if((cin>>grade)&&(grade<=100))
        {
        v=grade/10;
        ++b[v]; 
        }
        else 
        {
           cout<<" wrong number!!!!!!!! reboot ";
           break;
        }
    }
    vector<unsigned> socres(begin(b),end(b));
    for(auto &j:socres)
       cout<<j<<" ";
    return 0;
}

直接按照书上的下标例子改写运行总是报错 ,故采用了数组的方法
以下的代码我运行时出错的。。。。

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
    unsigned grade=0,a=0;
    vector<unsigned> socres(11,0);
    for(auto it=socres.begin(),iw=socres.end();it!=iw;++it)
    {
        if(cin>>grade&&grade<=100)
        {
            a=grade/10;
            *(it+a)+=1;
        }
        else
         {
            cout<<" wrong number!!!!reboot again!!!";
            break;
         }
    }
    for(auto &k : socres)
       cout<<k<<" ";
    return 0;
}

看过另一个答主使用 while控制输入。。。
觉得还是不太完美,
但他通过不断初始化it的方法来累加的思路很赞。
毛病也很明显:当你误输入11个数或者更多时(输入个数靠个人控制)。。。程序还是在运行虽然11个数及其之后结果不输出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值