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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c ++中声明向量后无法打印任何内容相关的知识,希望对你有一定的参考价值。

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

答案

很可能你的程序崩溃是因为你通过擦除元素而不是减小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()总是得到矢量的当前大小。

以上是关于在c ++中声明向量后无法打印任何内容的主要内容,如果未能解决你的问题,请参考以下文章

怎么可能在 C++ 中的 main() 中不声明任何内容,但在编译后有一个工作应用程序?

打开引导模式后无法单击任何内容

C语言习题如何在 C 中不使用任何分号打印从 1 到 N 的数字?

C++ 多次打印“once *some number* is *another number*”,而我没有在代码中打印任何内容(我需要在接下来的半小时内得到答案)

打印预览第一页后模态内容被截断

laravel:启动服务器后无法在控制台中键入