/*
*
* Copyright (C) 2023-08-16 14:22 zxinlog <zxinlog@126.com>
*
*/
#include <func.h>
// 定义结构体
typedef struct vector {
int *start;
int *finish;
int *end_of_storage;
} Vector;
Vector *init(int capacity);
int getSize(Vector *vec);
void growCapcaty(Vector *vec);
void push_back(Vector *vec, int data);
int pop(Vector *vec);
void printVec(Vector *vec);
#if 1
int main(int argc, char *argv[]) {
Vector *vec = init(10);
int size = getSize(vec);
printf("vec size = %d\n", size);
printVec(vec);
for (int i = 0; i < 100; i++) {
push_back(vec, i + 1024);
}
size = getSize(vec);
printVec(vec);
printf("vec size = %d\n", size);
for (int i = 0; i < 10; i++) {
pop(vec);
}
size = getSize(vec);
printVec(vec);
printf("vec size = %d\n", size);
return 0;
}
#endif
// 初始化
Vector *init(int capacity) {
Vector *vec = (Vector *) malloc(sizeof(Vector));
vec->start = (int *) malloc(sizeof(int) * capacity);
vec->finish = vec->start;
vec->end_of_storage = vec->start + capacity + 1;
return vec;
}
int getSize(Vector *vec) {
int size = 0;
if (vec->start != NULL) {
size = vec->finish - vec->start;
}
return size;
}
void push_back(Vector *vec, int data) {
if (vec->finish + 1 == vec->end_of_storage) {
// printf("vec is full.\n");
// return;
growCapcaty(vec);
}
*(vec->finish) = data;
vec->finish++;
}
int pop(Vector *vec) {
if (vec->finish == vec->start) {
printf("vec is empty.\n");
return -1;
}
int data = *(vec->finish - 1);
vec->finish--;
return data;
}
void printVec(Vector *vec) {
int *p = vec->start;
int count = 0;
while (p != vec->finish) {
printf("%d ", *p);
p++;
count++;
if (count % 10 == 0) {
printf("\n");
}
}
printf("\n");
}
void growCapcaty(Vector *vec) {
int size = vec->finish - vec->start;
int *p = (int *) malloc(sizeof(int) * size * 2);
int *temp = vec->start;
for (int i = 0; i < size; i++) {
p[i] = temp[i];
}
free(vec->start);
vec->start = p;
vec->finish = vec->start + size;
vec->end_of_storage = vec->start + (size * 2 + 1);
}