c语言 实现 vector,在C中转换vector的C实现

这是C中动态结构数组的实现(也是用法).我以前曾经在代码审查中发布过

#include

#include

#include

typedef struct

{

int ID;

char * name;

} Student;

// array of structs

typedef struct

{

Student *array;

size_t used;

size_t size;

} Array;

void initArray(Array *a, size_t initialSize)

{

int i = 0;

// Allocate initial space

a->array = malloc(initialSize * sizeof(Student));

a->used = 0; // no elements used

a->size = initialSize; // available nr of elements

// Initialize all values of the array to 0

for(i = 0; i

{

memset(&a->array[i],0,sizeof(Student));

}

}

// Add element to array

void addElement(Array *a, Student element)

{

int i = 0;

if (a->used == a->size)

{

a->size *= 2;

a->array = realloc(a->array, a->size * sizeof(Student));

// Initialize the last/new elements of the reallocated array

for(i = a->used; isize; i++)

{

memset(&a->array[i],0,sizeof(Student));

}

}

// Copy name

a->array[a->used].name = (char*)malloc(strlen(element.name) + 1);

strcpy(a->array[a->used].name, element.name);

// Copy ID

a->array[a->used].ID=element.ID;

a->used++;

}

void freeArray(Array *a)

{

int i = 0;

// Free all name variables of each array element first

for(i=0; iused; i++)

{

free(a->array[i].name);

a->array[i].name=NULL;

}

// Now free the array

free(a->array);

a->array = NULL;

a->used = 0;

a->size = 0;

}

int main(int argc, const char * argv[])

{

Array a;

Student x,y,z;

x.ID = 20;

x.name=malloc(strlen("stud1") + 1);

strcpy(x.name,"stud1");

y.ID = 30;

y.name=malloc(strlen("student2") + 1);

strcpy(y.name,"student2");

z.ID = 40;

z.name=malloc(strlen("student3") + 1);

strcpy(z.name,"student3");

// Init array, don't forget

initArray(&a, 5);

// Add elements

addElement(&a, x);

addElement(&a, y);

addElement(&a, z);

// Print elements

printf("%d

", a.array[0].ID);

printf("%s

", a.array[0].name);

printf("%d

", a.array[1].ID);

printf("%s

", a.array[1].name);

printf("%d

", a.array[2].ID);

printf("%s

", a.array[2].name);

// Free array

// don't forget

freeArray(&a);

free(x.name);

free(y.name);

free(z.name);

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值