【问题标题】:why this doesn't work but it isn't any problem?为什么这不起作用,但没有任何问题?
【发布时间】:2022-12-04 06:52:47
【问题描述】:
#include <iostream>
#include <vector>
using namespace std;

int main () {

    int n, min, conta=0;
    bool choice=true;
    cin>>n;
    vector <int> cont(n+2);
    cont[n]=0;
    cont[n+1]=0;
    for (int i=0; i<cont.size()-2; i++) {
        cin>>cont[i];
    }
    cin>>min;
    for (int j=0; j<cont.size()-2; j++) {
        if (cont[j]<min) {
            conta++;
           if (choice == true) {
            cont[n] = j+1;
            choice = false;
           } else {
            cont[n+1] = j+1;
           }
        }
    }
    cout<<conta<<" ";
    cout<<cont[n]<<" "<<cont[n+1]<<endl;
    return 0;
}

为什么它不起作用?我不能很好地使用矢量库,但在我看来没有错误,编译器也没有这样说。谁能帮我?

【问题讨论】:

  • 你能解释一下这段代码应该做什么吗?它的哪一部分不起作用?您提供的输入和期望的输出是什么?
  • 为什么它不起作用?获取一个调试器并逐行查看代码,并在执行每个语句后使用非常小的n查看变量和流程

标签: c++


【解决方案1】:

您的代码存在一些问题,导致其无法正常工作。

首先,您试图访问 cont 向量中超出范围的元素。在 for 循环中,您使用 size() 方法来确定迭代次数,但此方法返回向量中元素的总数,包括您在末尾添加的两个额外元素。这意味着您的循环正在尝试访问不存在的向量元素,这会导致错误。

要解决此问题,您可以简单地将循环条件更改为在 j 等于 n 而不是 cont.size()-2 时停止。这将确保您的循环仅访问向量中存在的元素。

for (int j=0; j<n; j++) {
  // Code here
}

其次,您的代码不处理向量中没有小于最小值的元素的情况。在这种情况下,cont[n] 和 cont[n+1] 的值将保持未初始化状态,这意味着它们的值将是未定义的。当您稍后尝试打印它们时,这可能会导致问题。

要解决这个问题,您可以简单地在 for 循环之后添加一个检查以查看 conta 是否等于 0,如果是,则将 cont[n] 和 cont[n+1] 设置为 0。这将确保这些值是始终初始化,即使向量中没有元素小于最小值。

if (conta == 0) {
  cont[n] = 0;
  cont[n+1] = 0;
}

我已经修改了您的代码以包含这些更改,现在它应该可以按预期工作:

#include <iostream>
#include <vector>
using namespace std;

int main () {
  int n, min, conta=0;
  bool choice=true;
  cin>>n;
  vector <int> cont(n+2);
  cont[n]=0;
  cont[n+1]=0;
  for (int i=0; i<n; i++) { // Use n instead of cont.size()-2
    cin>>cont[i];
  }
  cin>>min;
  for (int j=0; j<n; j++) { // Use n instead of cont.size()-2
    if (cont[j]<min) {
      conta++;
      if (choice == true) {
        cont[n] = j+1;
        choice = false;
      } else {
        cont[n+1] = j+1;
      }
    }
  }
  if (conta == 0) { // Check if conta is 0
    cont[n] = 0;
    cont[n+1] = 0;
  }
  cout<<conta<<" ";
  cout<<cont[n]<<" "<<cont[n+1]<<endl;
  return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 2021-06-02
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    相关资源
    最近更新 更多