在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*”,而我没有在代码中打印任何内容(我需要在接下来的半小时内得到答案)