具有大向量的奇怪输出

时间:2015-05-26 03:41:29

标签: c++ vector stl

我在解决问题上解决AMR10G问题。问题只是关于排序,并且使用数组实现是微不足道的。我是STL的初学者,只是为了熟悉STL,我试图用一些向量来解决它。代码运行良好,矢量小,但大尺寸(问题可能是20,000),它打印所有0。这是我的代码。

#include <iostream>
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;


int main() {
    int T;
    cin>>T;
    while(T--){
        int N, k, i;
        cin>>N >> k;
        //***********************************************************
        vector<int> ar(N);//problem seems to be here when N ~ 20000
        //***********************************************************
        for(i = 0; i<N; i++) scanf("%d",&ar[i]);

        sort(ar.begin(),ar.end());

        //calculate smallest difference
        int small = ar[k-1] - ar[0];
        for(i = k-1; i<N; i++){
            int temp;
            if( temp = ar[i] - ar[i-k+1] < small) small = temp;
        }
        cout<<small <<endl;//print smallest difference
    }
    return 0;
}

当我将类型更改为数组时,它运行得非常好。使用矢量有什么问题?

1 个答案:

答案 0 :(得分:1)

您的代码缺少错误检查:

  • 检查arr2.values_at(*arr2.map { |str,_| arr1.index(str) }) #=> [["name1", 10], ["name2", 20], ["name3", 15]] 是否成功。
  • 检查每个cin >> N >> k是否成功。
  • 检查scanf是否在数组范围的范围内。

任何这些失败都可能导致您的问题。

此行还有一个逻辑错误:

k -1

控制表达式被解析为if( temp = ar[i] - ar[i-k+1] < small) small = temp; ,因此如果temp = (ar[i] - ar[i-k+1] < small),此行将设置small = 1,否则不执行任何操作。你可能意味着ar[i] - ar[i-k+1] < small