/* * Types Wanted: * Char * Float * Int * String */ #include #include #include #include typedef struct { char* arr; size_t size; } Vec8_t; Vec8_t create(size_t init_size) { Vec8_t vec = { .arr = nullptr, .size = 0 }; if (init_size > 0) { vec.arr = malloc(init_size * sizeof(char)); vec.size = init_size; } return vec; } void delete(Vec8_t* vec) { if (vec->arr != nullptr) { free(vec->arr); } vec->arr = nullptr; } char at(Vec8_t* vec, int idx) { if (vec->arr != nullptr && vec->size >= idx) { return vec->arr[idx]; } return -1; } void print_vec(Vec8_t* vec) { for(int i = 0; i < vec->size; i++) { printf("%c ", at(vec, i)); } printf("\n"); } int begin(Vec8_t* vec) { if (vec->arr != nullptr && vec->size > 0) { return 1; } return -1; } int end(Vec8_t* vec) { if (vec->arr != nullptr && vec->size > 0) { return (int)(vec->size - 1); } return -1; } char front(Vec8_t* vec) { if (vec->arr != nullptr && vec->size > 0) { return vec->arr[0]; } return -1; } char back(Vec8_t* vec) { if (vec->arr != nullptr && vec->size > 0) { return vec->arr[vec->size - 1]; } return -1; } Vec8_t add_back(Vec8_t* vec, char val) { Vec8_t nvec = create(vec->size + 1); memcpy(&nvec.arr[0], &vec->arr[0], vec->size * sizeof(char)); if (nvec.arr && (nvec.size > 0 || nvec.size > vec->size)) { nvec.arr[vec->size] = val; } return nvec; } Vec8_t add_front(Vec8_t* vec, char val) { Vec8_t nvec = create(vec->size + 1); memcpy(&nvec.arr[1], &vec->arr[0], vec->size * sizeof(char)); if (nvec.arr && (nvec.size > 0 || nvec.size > vec->size)) { nvec.arr[0] = val; } return nvec; } int main() { Vec8_t vec = create(0); vec = add_back(&vec, '3'); vec = add_back(&vec, '4'); vec = add_back(&vec, '5'); vec = add_back(&vec, '6'); print_vec(&vec); vec = add_front(&vec, 'c'); print_vec(&vec); delete(&vec); return 0; }