【问题标题】:Printing issue in vectors (CPP) in looping循环中的向量 (CPP) 打印问题
【发布时间】:2021-10-27 20:52:00
【问题描述】:

我正在编写问题陈述。对于它的实现,我使用了向量。

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

int busRemaining(vector<vector<int>> &busStation) {
    int answer=0;
    for(int i=0; i<=busStation.size(); i++) {
        for(int j=i+1; j<=busStation.size(); j++)
        {
            if((busStation[i][0] <= busStation[j][0]) && (busStation[i][1] >= busStation[j][0])) {
                answer++;
            }
        }
    }
    return answer;
}

int main()
{
    vector<vector<int>> v = {{2, 8},{6, 10},{12, 14},{12, 20}};
    cout<<busRemaining(v);

    return 0;
}

我面临的问题是 -> 运行程序后,控制台上没有打印任何内容。我已经将answer 初始化为0,所以我建议即使我的循环逻辑错误,它至少应该返回0。

【问题讨论】:

    标签: c++ algorithm loops vector logic


    【解决方案1】:

    您在 for 循环中使用了错误的条件。矢量是零索引,因此您应该使用 less-than 而不是 less-than-or-equal

    for (int i = 0; i < busStation.size(); i++)
                      ^
                      |
                     here
    

    for (int j = i + 1; j < busStation.size(); j++)
                          ^
                          |
                         here
    

    你的函数没有返回的原因,是因为你接触了向量之外的内存,你的程序可能没有分配的内存,这使得你的程序的行为未定义,即你的程序的行为取决于编译器和操作您使用的系统。

    【讨论】:

      【解决方案2】:

      您的代码可能有问题,您无法访问busStation[busStation.size()],因为该元素不存在。先尝试解决这个问题。

      【讨论】:

        【解决方案3】:

        如您所见,在两个 for 循环中都放置了 i&lt;=busStation.size();j&lt;=busStation.size();。它给出超出范围的错误并导致运行时错误。它应该是&lt; 而不是&lt;=。我希望你知道为什么会这样。在第二个循环中,您再次使用了busStation.size(),如果您尝试在向量中迭代单个向量的元素,这可能会导致错误。我编写此代码只是为了修复错误。我不知道它是否如你所愿。

        #include <iostream>
        #include <vector>
        using namespace std;
        
        int busRemaining(vector<vector<int>> &busStation) {
            int answer=0;
            for(int i=0; i<busStation.size(); i++) {
                for(int j=i+1; j<busStation[i].size(); j++)
                {
                    if((busStation[i][0] <= busStation[j][0]) && (busStation[i][1] >= busStation[j][0])) {
                        answer++;
                    }
                }
            }
            return answer;
        }
        
        int main()
        {
            vector<vector<int>> v = {{2, 8},{6, 10},{12, 14},{12, 20}};
            cout<<busRemaining(v);
        
            return 0;
        }
        

        【讨论】:

          猜你喜欢
          • 2012-12-12
          • 1970-01-01
          • 2013-11-12
          • 2022-06-15
          • 1970-01-01
          • 2013-08-03
          • 2021-12-06
          • 1970-01-01
          • 2020-03-15
          相关资源
          最近更新 更多