首页 > 解决方案 > 向量输入后命令立即终止

问题描述

我创建了这个程序:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
    int n;
    cin>>n;
    vector<int> m(n);
    for(int i=0;i<n;i++){
        cin>>m[i];
    }
    
    sort(m.begin(),m.end());

    vector<bool> used(n,false);
    for(int i=n;i>0;i--){
        for(int j=i;j>0;j--){
            if((m[i]/m[j]>=2)&&(used[i]==false))
                used[j]=true;
        }
    }

    int numOfElem=0;
    for(int i=0;i<n;i++){
        if(used[i]!=true){
            numOfElem++;
        }
    }
    cout<<"\n"<<numOfElem<<"\n";

    return 0;
}

现在由于某种原因,在我输入向量 m 的元素后,我的命令被终止,有人知道这个问题的原因吗?

标签: c++vector

解决方案


自从您开始迭代(向量的大小)以来,您就可以访问向量m并越界。这会导致您的程序具有未定义的行为,并且崩溃是其中一种可能的结果。usedi == n

建议修复:

for(int i = n - 1; i >= 0; i--) { // start with n-1 and ...
    for(int j = i; j >= 0; j--) { // ... include 0 in the loop

另请注意,这m[i] / m[j]可能是除以零并引发异常,因此您可能也需要m[j] == 0在进行除法之前检查是否。


推荐阅读