C++参数化构造函数使代码在传递大输入时停止工作

C++ parameterized constructor makes code to stop working when large input's are passed

本文关键字:输入 停止工作 参数 构造函数 代码 C++      更新时间:2023-10-16
void initialize(int arr[], int size[], int n)
{
    int i;
    for(i = 1; i <= n; i++) {
        arr[i] = i;
        size[i] = 1;
    }
}
class hell
{
    public:
    int edges;
    int vertices;
    pair<int , pair<int,int>> p[100000];
    int disjoint_set[10000];
    int cc_size[10000]; // size of connected components
    hell(int e, int v)
    {
      edges = e;
      vertices = v;
      initialize(disjoint_set, cc_size, vertices);
    }
};

在以下类中,当我使用vertices=100000edges=100000创建对象时,代码停止工作。但是,当我们删除initialize(disjoint_set, cc_size, vertices)时,它会开始工作。我对这种行为没有任何线索。请引导我。

c 中的数组为零索引,这意味着有效索引在[0..n [range]中。您的代码做错了:

 for(i = 1; i <= n; i++) {
    arr[i] = i;
    size[i] = 1;
}

应该是:

 for(i = 0; i < n; i++) {
    arr[i] = i + 1;
    size[i] = 1 + 1;
}

或更好地使用Algo std :: iota((和std :: fill((:

std::iota( arr, arr + n, 1 );
std::fill( size, size + n, 1 );

您最好使用std :: vector,它将正确调整其尺寸,而不是具有巨大的数组。