繁体   English   中英

C++ 程序在在线编译器和 linux 操作系统中运行良好,但在 Windows 上运行良好

[英]A C++ Program which works fine in online compilers and linux operating systems, but not on Windows

编译问题时:
Geeks For Geeks:Windows 操作系统上的第一个重复元素我注意到我的解决方案没有得到任何 output。 但是当我在 Linux 操作系统和在线编译器上编译相同的代码时,它工作得非常好,没有产生任何错误。

代码:

#include <bits/stdc++.h>
using namespace std;

int main() {

    int n;
    cin>>n;
    int arr[n];

    for(int i=0; i <n; i++) {
        cin>>arr[i];
    }

    int size= 1e6+1; // WA on windows
    int A[size];
    int min_index=INT_MAX;

    for(int i=0; i<size; i++) {
        A[i]=-1;
    }

    for(int i=0; i<n; i++) {
        if(A[arr[i]]!=-1)
            min_index=min(min_index, A[arr[i]]);
        else
            A[arr[i]]=i;
    }

    if(min_index==INT_MAX) 
        cout<<"-1";
    else
        cout<< min_index+1;

    return 0;
}

示例测试用例:

7
1 5 3 4 3 5 6

预期 output:

2

Output 上 Windows:截图

Linux 上的 Output:截图

代码第 14 行对程序的解释:

我创建了一个大小为1e6+1的数组A以将值i存储在其arr[i] th 索引上。
数组A早先用值-1初始化。 它运行n次,变量min_index存储数组arr中重复次数最少的索引。
在初始化数组int size = 10的较小值并使用非常小的测试用例后(arr[i] 的最大值也小于A大小;我意识到该程序在 Windows 中完美运行。

据我了解,Windows 在初始化如此大长度的 arrays 时可能会遇到一些麻烦(如果我错了,请纠正我)。 但是为什么在 Linux 的情况下不一样呢?

#include <bits/stdc++.h>不是标准的 C++,因此您不应该期望它是可移植的。

int arr[n]; 不是标准的 C++。 一些编译器提供可变长度 arrays 作为扩展,但它不是可移植的。 同样适用于int A[size]; .

遗憾的是,该站点上提供的大多数 C++ 代码不是正确的 C++ 代码,而是一些方言。

有关更多详细信息,请参阅:为什么我不应该#include <bits/stdc++.h>? 为什么不可变长度 arrays C++ 标准的一部分? . 问答还应该解释标准的便携式替代品。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM