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=100000
和edges=100000
创建对象时,在以下类中,代码停止工作。但是当我们删除initialize(disjoint_set, cc_size, vertices)
时,它就开始工作了。我对这种行为没有任何线索。请指导我。
答案 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,它会正确调整其大小,而不是使用大数组。