在 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 &lt;&lt; 'test' 应该是 cout &lt;&lt; "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++ 中传递字符串

无法正确打印 Vector 的内容

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

如何在 c++ 中打印字典?这是我正在运行的代码,我无法使用 printDicionary 方法

C++ 析构函数:无法访问类中声明的私有成员

与在 C++ 中使用 push_back 相比,声明具有大小的向量是不是提供了任何改进