clear() no longer creates a new set of memory, just sets the values to 0
This commit is contained in:
+63
-27
@@ -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)
|
||||||
{
|
{
|
||||||
@@ -148,14 +179,16 @@ add_back(Vec8_t* vec, const char val)
|
|||||||
if (vec->size >= vec->capacity)
|
if (vec->size >= vec->capacity)
|
||||||
{
|
{
|
||||||
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[vec->size] = val;
|
vec->arr = nvec;
|
||||||
vec->size++;
|
}
|
||||||
return *vec;
|
vec->arr[vec->size] = val;
|
||||||
|
vec->size++;
|
||||||
|
return *vec;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -166,10 +199,13 @@ 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);
|
||||||
// print_vec(&vec);
|
for(int i = 0; i < vec.size; i++) {
|
||||||
|
printf("%i\n", at(&vec, i));
|
||||||
|
}
|
||||||
|
// print_vec(&vec);
|
||||||
// printf("%c", at(nullptr, 0));
|
// printf("%c", at(nullptr, 0));
|
||||||
|
|
||||||
delete(&vec);
|
delete(&vec);
|
||||||
|
|||||||
Reference in New Issue
Block a user