#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
//////////////////////////////////////
typedef struct {
int group[8];
uint64_t points;
} BestGroup;
//////////////////////////////////////
typedef struct {
BestGroup *array;
size_t used;
size_t size;
} Array;
void initArray(Array *a, size_t initialSize) {
a
->array
= (BestGroup
*)malloc(initialSize
* sizeof(BestGroup
)); a->used = 0;
a->size = initialSize;
}
void insertArray(Array *a, int *group_add, uint64_t points_add) {
// a->used is the number of used entries, because a->array[a->used++] updates a->used only *after* the array has been accessed.
// Therefore a->used can go up to a->size
if (a->used == a->size) {
a->size *= 2;
a
->array
= (BestGroup
*)realloc(a
->array
, a
->size
* sizeof(BestGroup
)); }
int i;
for (i = 0; i < 8; i++)
{
a->array[a->used].group[i] = group_add[i];
}
a->array[a->used].points = points_add;
a->used++;
}
void freeArray(Array *a) {
a->array = NULL;
a->used = a->size = 0;
}
///////////////////////////////////////////////////////////////////////////////
int main()
{
Array a;
int i;
int list[8] = {0, 1, 2, 2, 4, 5, 6, 7};
initArray(&a, 5); // initially 5 elements
for (i = 0; i < 100; i++)
insertArray(&a, list, i); // automatically resizes as necessary
printf("%d\n", a.
array->group
[1]); // print 2nd element printf("%lu\n", a.
used); // print number of elements freeArray(&a);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGludHR5cGVzLmg+CgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCnR5cGVkZWYgc3RydWN0IHsKCiAgaW50IGdyb3VwWzhdOwogIHVpbnQ2NF90IHBvaW50czsKCn0gQmVzdEdyb3VwOwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCnR5cGVkZWYgc3RydWN0IHsKICBCZXN0R3JvdXAgKmFycmF5OwogIHNpemVfdCB1c2VkOwogIHNpemVfdCBzaXplOwp9IEFycmF5OwoKdm9pZCBpbml0QXJyYXkoQXJyYXkgKmEsIHNpemVfdCBpbml0aWFsU2l6ZSkgewogIGEtPmFycmF5ID0gKEJlc3RHcm91cCAqKW1hbGxvYyhpbml0aWFsU2l6ZSAqIHNpemVvZihCZXN0R3JvdXApKTsKICBhLT51c2VkID0gMDsKICBhLT5zaXplID0gaW5pdGlhbFNpemU7Cn0KCnZvaWQgaW5zZXJ0QXJyYXkoQXJyYXkgKmEsIGludCAqZ3JvdXBfYWRkLCB1aW50NjRfdCBwb2ludHNfYWRkKSB7CiAgLy8gYS0+dXNlZCBpcyB0aGUgbnVtYmVyIG9mIHVzZWQgZW50cmllcywgYmVjYXVzZSBhLT5hcnJheVthLT51c2VkKytdIHVwZGF0ZXMgYS0+dXNlZCBvbmx5ICphZnRlciogdGhlIGFycmF5IGhhcyBiZWVuIGFjY2Vzc2VkLgogIC8vIFRoZXJlZm9yZSBhLT51c2VkIGNhbiBnbyB1cCB0byBhLT5zaXplIAogIGlmIChhLT51c2VkID09IGEtPnNpemUpIHsKICAgIGEtPnNpemUgKj0gMjsKICAgIGEtPmFycmF5ID0gKEJlc3RHcm91cCAqKXJlYWxsb2MoYS0+YXJyYXksIGEtPnNpemUgKiBzaXplb2YoQmVzdEdyb3VwKSk7CiAgfQoKICBpbnQgaTsKCiAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKICB7CiAgICBhLT5hcnJheVthLT51c2VkXS5ncm91cFtpXSA9IGdyb3VwX2FkZFtpXTsKICB9CiAgYS0+YXJyYXlbYS0+dXNlZF0ucG9pbnRzID0gcG9pbnRzX2FkZDsKICBhLT51c2VkKys7Cn0KCnZvaWQgZnJlZUFycmF5KEFycmF5ICphKSB7CiAgZnJlZShhLT5hcnJheSk7CiAgYS0+YXJyYXkgPSBOVUxMOwogIGEtPnVzZWQgPSBhLT5zaXplID0gMDsKfQoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKaW50IG1haW4oKQoKewogICAgQXJyYXkgYTsKICAgIGludCBpOwogICAgaW50IGxpc3RbOF0gPSB7MCwgMSwgMiwgMiwgNCwgNSwgNiwgN307CgogICAgaW5pdEFycmF5KCZhLCA1KTsgIC8vIGluaXRpYWxseSA1IGVsZW1lbnRzCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspCiAgICAgIGluc2VydEFycmF5KCZhLCBsaXN0LCBpKTsgIC8vIGF1dG9tYXRpY2FsbHkgcmVzaXplcyBhcyBuZWNlc3NhcnkKICAgIHByaW50ZigiJWRcbiIsIGEuYXJyYXktPmdyb3VwWzFdKTsgIC8vIHByaW50IDJuZCBlbGVtZW50CiAgICBwcmludGYoIiVsdVxuIiwgYS51c2VkKTsgIC8vIHByaW50IG51bWJlciBvZiBlbGVtZW50cwogICAgZnJlZUFycmF5KCZhKTsKfQ==