【问题标题】:C++ problems in vector usage向量使用中的 C++ 问题
【发布时间】: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&lt;size_t&gt; 会更好。 @UserRR 你尝试调试了吗?

标签: c++ vector iteration


【解决方案1】:

这不是你所期望的:

for(decltype(vec.size()) i:vec)
   {
       cout<<vec[i];
   }

基于 for 的范围为您提​​供元素值,而不是元素索引。

你可能想要:

for(const auto& e : vec)
   {
       cout<<e;
   }

【讨论】:

  • 如果输入是 4、5、15。那么 00000000000->21000000000。所以,我需要值,而不是我猜的索引
  • 哦,我明白了,让我检查一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 2013-11-12
  • 1970-01-01
相关资源
最近更新 更多