在 C++ 中声明向量后无法打印任何内容
Posted
技术标签:
【中文标题】在 C++ 中声明向量后无法打印任何内容【英文标题】:can´t print anything after declaring vector in c++ 【发布时间】:2018-03-03 13:57:57 【问题描述】:我正在制作一个算法来解决来自 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++ 中使用向量还很陌生,有人可以向我解释一下发生了什么以及如何解决它吗?
【问题讨论】:
@Amadeus 既不打印结果也不打印“测试”文本。 @Ron 我怎样才能避免这样做? 我在在线编译器上运行了您的代码。在擦除操作之一期间引发分段错误。此外,您应该在“测试”字符串上使用双引号。 请查看此C++ books 列表。 您希望启用编译器警告,以便它告诉您类似 this warning 这样的信息,因此您注意到cout << 'test'
应该是 cout << "test"
。
【参考方案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()
来始终获取向量的当前大小。
【讨论】:
以上是关于在 C++ 中声明向量后无法打印任何内容的主要内容,如果未能解决你的问题,请参考以下文章
怎么可能在 C++ 中的 main() 中不声明任何内容,但在编译后有一个工作应用程序?