C++primer5 题3.25

来源:互联网 发布:php request method 编辑:程序博客网 时间:2024/05/17 22:27

用下表运算符。。
这题要求有点多余,练习也就罢了,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个数及其之后结果不输出来。