veci.h
veci.cCode:#ifndef _VECI_
#define _VECI_
#include <stddef.h>
typedef struct {
size_t size;
int *elements;
} veci;
void *v_new();
void v_free(veci*);
void v_push(veci*,int);
void v_pop(veci*);
size_t v_size(veci*);
void v_clear(veci*);
#endif
test file vector.cCode:#include "veci.h"
#include <stdlib.h>
void *v_new() {
return calloc(1,sizeof(veci));
}
void v_free(veci *vec) {
free(vec->elements);
free(vec);
}
void v_push(veci *vec, int val) {
++vec->size;
vec->elements=realloc(vec->elements,sizeof(int)*vec->size);
vec->elements[vec->size-1]=val;
}
void v_pop(veci *vec) {
--vec->size;
vec->elements=realloc(vec->elements,sizeof(int)*vec->size);
}
size_t v_size(veci *vec) {
return vec->size;
}
void v_clear(veci *vec) {
vec->elements=realloc(vec->elements,0);
vec->size=0;
}
Is there a nice way to lessen number of bytes allocated in this example?Code:#include "veci.h"
#include <stdio.h>
int main() {
//Create a new int vector
veci *myvec=v_new();
//Push some values
for(int i=0; i<8; ++i)
v_push(myvec,i*10);
//Remove last
v_pop(myvec);
//Print the content
for(size_t i=0; i<v_size(myvec); ++i)
printf("%d\n",myvec->elements[i]);
//Free the int vector
v_free(myvec);
return 0;
}