Add clear to vector and static_vector

This commit is contained in:
drmortalwombat 2025-05-08 12:30:50 +02:00
parent 2b224f262b
commit b4a357e44f
2 changed files with 26 additions and 7 deletions

View File

@ -22,7 +22,7 @@ public:
{
T * data = (T*)_space;
for(size_t i=0; i<n; i++)
new (data + i) T;
new (data + i) T();
}
static_vector(const static_vector & v)
@ -76,6 +76,8 @@ public:
void resize(size_t n);
void clear(void);
T & at(size_t at)
{
return ((T*)_space)[at];
@ -177,6 +179,14 @@ public:
};
template <class T, int N>
void static_vector<T, N>::clear(void)
{
T * data = (T*)_space;
for(size_t i=0; i<_size; i++)
data[i].~T();
_size = 0;
}
template <class T, int N>
void static_vector<T, N>::resize(size_t n)
@ -186,14 +196,13 @@ void static_vector<T, N>::resize(size_t n)
{
for(size_t i=n; i<_size; i++)
data[i].~T();
_size = n;
}
else
else if (n > 0)
{
for(size_t i=_size; i<n; i++)
new(data + i)T;
_size = n;
new(data + i)T();
}
_size = n;
}
template <class T, int N>
@ -219,7 +228,7 @@ template <class T, int N>
void static_vector<T, N>::insert(size_t at, const T & t)
{
T * data = (T*)_space;
new (data + _size)T;
new (data + _size)T();
for(size_t i=_size; i>at; i--)
data[i] = move(data[i - 1]);
data[at] = t;
@ -242,7 +251,7 @@ T * static_vector<T, N>::insert(T * at, const T & t)
{
T * data = (T*)_space;
T * dp = data + _size;
new (dp)T;
new (dp)T();
while (dp != at)
{
dp--;

View File

@ -94,6 +94,8 @@ public:
return _capacity;
}
void clear(void);
void resize(size_t n);
void reserve(size_t n);
@ -220,6 +222,14 @@ void vector<T>::reserve(size_t n)
}
}
template <class T>
void vector<T>::clear(void)
{
for(size_t i=0; i<_size; i++)
_data[i].~T();
_size = 0;
}
template <class T>
void vector<T>::resize(size_t n)
{