clear() no longer creates a new set of memory, just sets the values to 0

This commit is contained in:
Andrew Haynes
2026-04-28 13:14:06 -04:00
parent b77f260a2c
commit 280e728520
+55 -19
View File
@@ -5,6 +5,35 @@
* Vector Library For C * Vector Library For C
*/ */
/*
* 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
*
* assign() Fills a vector with multiple values
* clear() Removes all of the contents of a vector
* data() Returns a pointer to the block of memory where a vector's elements are
* stored empty() Checks whether a vector is empty or not 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
* element of a vector reserve() Reserves memory for a vector resize()
* Changes the size of a vector, adding or removing elements if necessary
* shrink_to_fit() Reduces the reseved memory of a vector if necessary to
* exactly fit the number of elements swap() Swaps the contents of one vector
* with another
* */
/* /*
* Types Wanted: * Types Wanted:
* Char * Char
@@ -36,24 +65,13 @@ typedef struct
size_t capacity; size_t capacity;
} Vec8_t; } Vec8_t;
/* Takes in a temporary cpy of a vec #define CAPACITY 1024
* - Can be nullptr to not have size incrementation and have a size of 0 (Create
* an empty vector)
*
* - Can be a vec to have size incrementation and size of base vec + 1 (Create a
* vector for modifying an old vector)
*
* */
Vec8_t Vec8_t
create(const Vec8_t* input) create(const Vec8_t* input)
{ {
Vec8_t vec = { .arr = nullptr, .size = 0, .capacity = 4 }; Vec8_t vec = { .arr = nullptr, .size = 0, .capacity = CAPACITY };
if (input == nullptr) if (input != nullptr && input->size > 0)
{
vec.arr = calloc(vec.capacity, sizeof(char));
return vec;
}
if (input->size > 0)
{ {
vec.size = input->size + 1; vec.size = input->size + 1;
} }
@@ -71,6 +89,19 @@ delete(Vec8_t* vec)
vec->arr = nullptr; vec->arr = nullptr;
} }
Vec8_t
clear(Vec8_t* vec)
{
if (vec != nullptr && vec->capacity > 0)
{
for(int i = 0; i < vec->size; i++) {
if(!vec->arr) continue;
vec->arr[i] = 0;
}
}
return *vec;
}
char char
at(const Vec8_t* vec, const int idx) at(const Vec8_t* vec, const int idx)
{ {
@@ -149,9 +180,11 @@ add_back(Vec8_t* vec, const char val)
{ {
vec->capacity *= 2; vec->capacity *= 2;
char* nvec = reallocf(vec->arr, vec->capacity * sizeof(char)); char* nvec = reallocf(vec->arr, vec->capacity * sizeof(char));
if(nvec == NULL) { if (nvec == NULL)
{
return *vec; return *vec;
} }
vec->arr = nvec;
} }
vec->arr[vec->size] = val; vec->arr[vec->size] = val;
vec->size++; vec->size++;
@@ -166,9 +199,12 @@ main()
vec = add_back(&vec, '4'); vec = add_back(&vec, '4');
vec = add_back(&vec, '5'); vec = add_back(&vec, '5');
vec = add_back(&vec, '6'); vec = add_back(&vec, '6');
print_vec(&vec); vec = add_back(&vec, '8');
// vec = add_back(&vec, '6'); vec = add_back(&vec, '6');
// vec = add_front(&vec, 'c'); clear(&vec);
for(int i = 0; i < vec.size; i++) {
printf("%i\n", at(&vec, i));
}
// print_vec(&vec); // print_vec(&vec);
// printf("%c", at(nullptr, 0)); // printf("%c", at(nullptr, 0));