implemented erase from vector
This commit is contained in:
parent
68c626d800
commit
57ff54aac9
3 changed files with 20 additions and 7 deletions
|
|
@ -6,16 +6,18 @@
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
vector *vec = vec_create(sizeof(int));
|
vector *vec = vec_create(sizeof(int));
|
||||||
for (int x = 0; x < 100; x++) {
|
for (int x = 0; x < 110; x++) {
|
||||||
vec_push_back(vec, &x);
|
vec_push_back(vec, &x);
|
||||||
}
|
}
|
||||||
int i = 99999999;
|
int i = 99999999;
|
||||||
vec_push_index(vec, &i, 5);
|
vec_insert(vec, &i, 5);
|
||||||
vec_push_front(vec, &i);
|
vec_push_front(vec, &i);
|
||||||
printf("Capacity before shrink: %zu | ", vec_capacity(vec));
|
printf("Capacity before shrink: %zu | ", vec_capacity(vec));
|
||||||
vec_shrink_to_fit(vec);
|
vec_shrink_to_fit(vec);
|
||||||
printf("Capacity after: %zu\n", vec_capacity(vec));
|
printf("Capacity after: %zu\n", vec_capacity(vec));
|
||||||
for (int x = 0; x < 102; x++) {
|
vec_erase(vec, 0);
|
||||||
|
vec_erase(vec, 101);
|
||||||
|
for (int x = 0; x < 110; x++) {
|
||||||
printf("%d ", *(int *)vec_get(vec, x));
|
printf("%d ", *(int *)vec_get(vec, x));
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
|
||||||
14
src/vec.c
14
src/vec.c
|
|
@ -53,9 +53,9 @@ void vec_push_back(vector *vec, void *data) {
|
||||||
vec->size++;
|
vec->size++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vec_push_front(vector *vec, void *data) { vec_push_index(vec, data, 0); }
|
void vec_push_front(vector *vec, void *data) { vec_insert(vec, data, 0); }
|
||||||
|
|
||||||
void vec_push_index(vector *vec, void *data, uint index) {
|
void vec_insert(vector *vec, void *data, uint index) {
|
||||||
assert(vec != NULL);
|
assert(vec != NULL);
|
||||||
assert(index <= vec->size);
|
assert(index <= vec->size);
|
||||||
// TODO: handle wraparound
|
// TODO: handle wraparound
|
||||||
|
|
@ -68,6 +68,16 @@ void vec_push_index(vector *vec, void *data, uint index) {
|
||||||
memcpy(vec->elements + (index * vec->element_size), data, vec->element_size);
|
memcpy(vec->elements + (index * vec->element_size), data, vec->element_size);
|
||||||
vec->size++;
|
vec->size++;
|
||||||
}
|
}
|
||||||
|
void vec_erase(vector *vec, uint index) {
|
||||||
|
assert(vec != NULL);
|
||||||
|
assert(index <= vec->size);
|
||||||
|
// TODO: handle wraparound
|
||||||
|
|
||||||
|
memcpy(vec->elements + index * vec->element_size,
|
||||||
|
vec->elements + (index + 1) * vec->element_size,
|
||||||
|
(vec->size - index) * vec->element_size);
|
||||||
|
vec->size--;
|
||||||
|
}
|
||||||
|
|
||||||
void *vec_get(vector *vec, uint index) {
|
void *vec_get(vector *vec, uint index) {
|
||||||
// TODO: handle wraparound
|
// TODO: handle wraparound
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,8 @@ void vec_shrink_to_fit(vector *vec);
|
||||||
// Which means you can only push one element at a time
|
// Which means you can only push one element at a time
|
||||||
void vec_push_back(vector *vec, void *data);
|
void vec_push_back(vector *vec, void *data);
|
||||||
void vec_push_front(vector *vec, void *data);
|
void vec_push_front(vector *vec, void *data);
|
||||||
void vec_push_index(vector *vec, void *data, uint index);
|
void vec_insert(vector *vec, void *data, uint index);
|
||||||
|
void vec_erase(vector *vec, uint index);
|
||||||
|
|
||||||
void *vec_get(vector *vec, uint index);
|
void *vec_get(vector *vec, uint index);
|
||||||
size_t vec_size(vector *vec);
|
size_t vec_size(vector *vec);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue