erase() function takes iter range

This commit is contained in:
Andrew Haynes
2026-05-01 21:28:16 -04:00
parent 509228bf58
commit b6e9e879c9
5 changed files with 963 additions and 42 deletions
+38 -25
View File
@@ -7,24 +7,12 @@
/*
* All functions needed
* Ones that start with '>' I have completed
*
* > at() Returns an indexed element from a vector
* > back() Returns the last element of a vector
* > begin() Returns an iterator pointing to the beginning of a vector
* > capacity() Returns the number of elements that a vector's reserved memory is able to store
* > front() Returns the first element of a vector
* > end() Returns an iterator pointing to the end of a vector
* > push_back() Adds an element to the end of a vector
* > size() Returns the number of elements in a vector
* > clear() Removes all of the contents of a vector
* > empty() Checks whether a vector is empty or not
*
* assign() Fills a vector with multiple values
* data() Returns a pointer to the block of memory where a vector's elements are
* stored erase() Removes
* a number of elements from a vector insert() Inserts a number of elements
* into a vector max_size() Returns the maximum number of elements that a
* stored
* erase() Removes a number of elements from a vector
* insert() Inserts a number of elements into a vector
* max_size() Returns the maximum number of elements that a
* vector can have pop_back() Removes the last element of a vector rbegin()
* Returns a reverse iterator pointing to the last element of a vector rend()
* Returns a reverse iterator pointing to a position right before the first
@@ -93,7 +81,7 @@ delete(Vec8_t* vec)
Vec8_t
clear(Vec8_t* vec)
{
if (vec != nullptr && vec->capacity > 0)
if (vec != nullptr && vec->size > 0)
{
for(int i = 0; i < vec->size; i++) {
if(!vec->arr) continue;
@@ -126,14 +114,28 @@ at(const Vec8_t* vec, const int idx)
return -1;
}
Vec8_t*
__attribute__((overloadable)) Vec8_t*
erase(Vec8_t* vec, const int iter) {
if(vec == nullptr) return nullptr;
if(vec->arr == nullptr) return nullptr;
if(iter >= vec->size) return nullptr;
vec->arr[iter] = 0;
memmove(&vec->arr[iter], &vec->arr[iter + 1], (vec->size - iter - 1) * sizeof(char));
vec->size--;
memmove(&vec->arr[iter], &vec->arr[iter + 1], (vec->size - iter) * sizeof(char));
vec->arr[iter] = 0;
return vec;
}
__attribute__((overloadable)) Vec8_t*
erase(Vec8_t* vec, const int iter_start, const int iter_end) {
if(vec == nullptr) return nullptr;
if(vec->arr == nullptr) return nullptr;
if(iter_start < 0 && iter_end >= vec->size) return nullptr;
int diff = iter_end - iter_start;
vec->size -= diff;
memmove(&vec->arr[iter_start], &vec->arr[iter_end], (vec->size - 1) * sizeof(char));
for(int i = 0; i < diff; i++) {
vec->arr[iter_start + i] = 0;
}
return vec;
}
@@ -223,11 +225,22 @@ main()
vec = add_back(&vec, '6');
vec = add_back(&vec, '8');
vec = add_back(&vec, '6');
vec = *erase(&vec, begin(&vec) + 2);
// for(int i = 0; i < vec.size; i++) {
// printf("%i\n", at(&vec, i));
// }
print_vec(&vec);
size_t size = vec.size;
for (int i = 0; i < size; i++) {
if(vec.arr[i] == 0) printf("0");
printf("%c ", vec.arr[i]);
}
printf("\n");
// print_vec(&vec);
// vec = *erase(&vec, begin(&vec) + 2);
vec = *erase(&vec, begin(&vec) + 2, begin(&vec) + 4);
for (int i = 0; i < size; i++) {
if(vec.arr[i] == 0) printf("0");
printf("%c ", vec.arr[i]);
}
printf("\n");
// print_vec(&vec);
// printf("%c", at(nullptr, 0));
delete(&vec);