diff --git a/include/opp/static_vector.h b/include/opp/static_vector.h index c5358c6..bc48684 100644 --- a/include/opp/static_vector.h +++ b/include/opp/static_vector.h @@ -22,7 +22,7 @@ public: { T * data = (T*)_space; for(size_t i=0; i +void static_vector::clear(void) +{ + T * data = (T*)_space; + for(size_t i=0; i<_size; i++) + data[i].~T(); + _size = 0; +} template void static_vector::resize(size_t n) @@ -186,14 +196,13 @@ void static_vector::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 @@ -219,7 +228,7 @@ template void static_vector::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::insert(T * at, const T & t) { T * data = (T*)_space; T * dp = data + _size; - new (dp)T; + new (dp)T(); while (dp != at) { dp--; diff --git a/include/opp/vector.h b/include/opp/vector.h index 485051e..a42b867 100644 --- a/include/opp/vector.h +++ b/include/opp/vector.h @@ -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::reserve(size_t n) } } +template +void vector::clear(void) +{ + for(size_t i=0; i<_size; i++) + _data[i].~T(); + _size = 0; +} + template void vector::resize(size_t n) {