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

时间:2018-04-24 13:56:05

标签: c++

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)时,它就开始工作了。我对这种行为没有任何线索。请指导我。

1 个答案:

答案 0 :(得分:3)

C ++中的数组是零索引的,这意味着有效索引在[0..n [范围内]。你的代码做错了:

 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,它会正确调整其大小,而不是使用大数组。