【发布时间】:2016-10-08 17:23:27
【问题描述】:
假设我多次输入 0-109 之间的值。我有一个向量,它计算特定范围(0-9、10-19、...100-109)中的值发生了多少次。
例如,我最初的向量:
0 0 0 0 0 0 0 0 0 0 0
我给出 15、16、88、95、94、5 作为输入。向量变为:
1 2 0 0 0 0 0 0 1 2 0
这是我的代码:
#include <iostream>
#include <vector>
using std::vector; using std::endl;
using std::cin; using std::cout;
int main()
{
int m=0;
vector<int>vec(11,0);//00000000000
while(cin>>m)
{
vec[m/10]=vec[m/10]+1;//ex: m=15->m/10==1->vec[1]=vec[1]+1->vec[1]==1;
}//use ctrl+z(windows) to break
cout<<"012345678910"<<endl;
for(decltype(vec.size()) i:vec)
{
cout<<vec[i];
}
}
为什么我的代码不能正常工作?
附:代码倾向于对向量的许多元素使用一个值。
【问题讨论】:
-
decltype 的使用非常糟糕,使用
for (auto i: vec)或许多其他替代方法 -
std::map对于这个用例来说是一个更好的容器,您可以将范围存储为key_type和编号。出现次数为mapped_type。 -
我正在学习 C++,我试图用我已经学过的工具(尚未学习 std::map)解决给定的问题,但它不起作用。我的问题不是关于如何执行任务,而是关于我的执行有什么问题
-
@ArchbishopOfBanterbury 恕我直言地图在这里不是必需的。您在这里有众所周知的索引:0-10。矢量还可以,但
std::array<size_t>会更好。 @UserRR 你尝试调试了吗?