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