c++ - vector 中的段错误

标签 c++ segmentation-fault

这是我为 Topcoder SRM 编写的代码。但是这里有一个我无法弄清楚的段错误。你能帮我弄清楚吗?

问题是——

此任务是关于骰子游戏 Yahtzee 第一阶段的计分,其中使用了五个骰子。分数由滚动后向上模具面上的值决定。玩家可以选择一个值,所有显示所选值的骰子都被认为是活跃的。分数只是事件骰子上的值的总和。 例如,假设玩家最终的骰子面显示 2、2、3、5 和 4。选择值 2 会使显示 2 的骰子激活并产生 2 + 2 = 4 的分数,而选择 5 则一个模具显示 5 个活跃,得分为 5。 您的方法将以 vector throw 作为输入,其中每个元素代表骰子的正面,并返回具有这些值的最大可能分数。

约束 -

折腾恰好包含五个要素。 每个元素都会在 1 到 6 之间

#include <iostream>
#include <vector>

using namespace std;

class YahtzeeScore
{
  public:
  int maxPoints(vector<int> toss);
};

int YahtzeeScore::maxPoints(vector <int> toss)
{ 
  vector<int> ret;
  vector <int>::iterator v = toss.begin();
  vector<int>::iterator w = toss.begin();
  for (;v != toss.end(); v++)
  {
    int s=0;
    for (;w != toss.end(); w++)
    {
      if ( w!=v && *w==*v) s++;
    }
     ret.push_back(s);
  }

  vector<int>::iterator it = ret.begin();
  for (; it!=ret.end(); it++)
  {
    if (*v>*(v+1))
    {
      int temp = *v;
      *v = *(v+1);
      *(v+1)=temp;
    }
  } 
  return ret[4];
}


int main()
{
  YahtzeeScore ob;
  vector<int> something;
  vector<int>::iterator it = something.begin();
  while (it != something.end())
  {
    int a;
    cin >> a;
    something.push_back(a);
  }
  cout << ob.YahtzeeScore::maxPoints(something);
}

最佳答案

注意:您应该通过调试器运行它。

main() 中的这段代码:

vector<int>::iterator it = something.begin();
while (it != something.end())

it 永远是 something.end() 因为 something 是空的。这意味着它从不读取任何输入,这意味着您将一个空 vector 传递给 maxPointsmaxPoints 循环都不会运行,因为 toss 为空且 ret 为空。所以 ret[4] 会导致段错误。

如您所知,您需要 5 个输入,只需使用如下内容:

for (int i = 0; i < 5; i++)
{
    int a;
    cin >> a;
    something.push_back(a);
}

关于c++ - vector 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23074890/

相关文章:

c++ - Eclipse C++类生成格式化

c++ - 在openCV中显示两个相互重叠的图像

c++ - std::min/std::max 只保证一次评估

python - 在python中使用winmm.dll获取输入设备

c - 对变量的赋值在完全不相关的函数中给出了段错误

c++ - 大输入的段错误

c++ - 如何初始化指向模板化祖先数据的指针

c++ - OpenCV C++ 如何使停留点击?

c++ - Linux 共享内存与 C++ : Segmentation Fault

c++ - std::string::assign(std::string const&) 中的段错误