Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //http://www.youtube.com/user/thecplusplusguy
- //standard C vector
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct _vector{
- void* array;
- int size;
- int capacity;
- int elementSize;
- } vector;
- vector* initVector(int elementSizeInBytes)
- {
- vector* v=(vector*)malloc(sizeof(vector));
- v->capacity=16; //start from 16 element
- v->size=0;
- v->elementSize=elementSizeInBytes;
- v->array=malloc(v->capacity*v->elementSize);
- return v;
- }
- vector* freeVector(vector* v)
- {
- free(v->array);
- free(v);
- }
- void pushBackVector(vector* v,void* element)
- {
- int startIndex=v->size*v->elementSize;
- void* pointer; //older C standard required you, to declare variables at the begginning
- int i;
- if(v->size>=v->capacity)
- {
- pointer=malloc(v->capacity*2*v->elementSize);
- for(i=0;i<v->capacity*v->elementSize;i++)
- ((char*)pointer)[i]=((char*)v->array)[i];
- v->capacity=v->capacity*2;
- free(v->array);
- v->array=pointer;
- }
- for(i=0;i<v->elementSize;i++)
- ((char*)v->array)[startIndex+i]=((char*)element)[i];
- v->size++;
- }
- void* getVector(vector* v,int i)
- {
- return (void*)(&((char*)v->array)[i*v->elementSize]);
- }
- int getSizeVector(vector* v)
- {
- return v->size;
- }
- int main()
- {
- int i;
- double d;
- vector* v;
- v=initVector(sizeof(int));
- for(i=0;i<=100;i+=5)
- pushBackVector(v,&i);
- for(i=0;i<getSizeVector(v);i++)
- {
- printf("%d ",*((int*)getVector(v,i)));
- }
- printf("\n");
- freeVector(v);
- v=initVector(sizeof(double));
- for(d=0.0;d<=10.0;d+=0.5)
- pushBackVector(v,&d);
- for(i=0;i<getSizeVector(v);i++)
- {
- printf("%lf ",*((double*)getVector(v,i)));
- }
- printf("\n");
- freeVector(v);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement