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

时间:2018-03-03 13:57:57

标签: c++ algorithm vector

我正在制作一个算法来解决来自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 ++中使用向量很新,有人可以向我解释发生了什么以及如何解决它?

1 个答案:

答案 0 :(得分: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()来获得当前的向量大小。