在c ++中声明向量后无法打印任何内容

问题描述 投票:-1回答:1

我正在制作一个算法来解决来自URI Online Judge的问题1310,并且在某些时候我需要以简单的方式从数组中删除一个项目,所以我声明了一个向量,但是,除了没有任何问题运行,我的代码没有打印任何东西,cout根本不起作用。

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int Lucro(int c, int n, vector<int> r){
  if (n == 0){
    return 0;
  }else if (n == 1){
    return max(r[0] - c, 0);
  }

  int q;
  q = 0;
  for (int k = 0; k < n; k++){
    r.erase(r.begin() + k);
    q = max(q, r[k] - c + Lucro(c, n-1, r));
  }
  return q;
}

int main()
{

  int C, N, items;
  cin >> N >> C;
  vector<int> R;

  for (int i = 0; i < N; i++){
    cin >> items;
    R.push_back (items);
  }

  cout << Lucro(C, N, R) << endl;
  cout << 'test' << endl;
}

由于我是在c ++中使用向量的新手,有人可以向我解释发生了什么以及如何解决它?

c++ algorithm vector
1个回答
1
投票

很可能你的程序崩溃是因为你通过擦除元素而不是减小n的大小来超出你的矢量范围:

for (int k = 0; k < n; k++){
    r.erase(r.begin() + k);  //decrement n after this
    q = max(q, r[k] - c + Lucro(c, n-1, r));
}

在任何情况下你都不应该真的有n变量,你应该使用r.size()总是得到矢量的当前大小。

© www.soinside.com 2019 - 2024. All rights reserved.