From 9cbeacef212b2fcbf1a6ee41ebc873e9a6216540 Mon Sep 17 00:00:00 2001 From: Patrick Date: Mon, 29 Jul 2024 17:22:47 +0200 Subject: [PATCH] fixed erase() --- include/const_vector.hpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/include/const_vector.hpp b/include/const_vector.hpp index 94b6f90..79b2b89 100644 --- a/include/const_vector.hpp +++ b/include/const_vector.hpp @@ -486,22 +486,29 @@ namespace cc { template constexpr const_vector::iterator const_vector::erase(const_vector::const_iterator pos) { - _erase_no_move(pos); - std::move(pos + 1, end(), pos); + auto it = const_cast(pos); + + std::destroy_n(it, 1); + std::move(it + 1, end(), it); --_size; - return pos; + return it; } template constexpr const_vector::iterator const_vector::erase(const_vector::const_iterator first, const_vector::const_iterator last) { - _erase_no_move(first, last); - std::move(last + 1, end(), first); - _size -= (last - first); + auto _first = const_cast(first); + auto _last = const_cast(last); + + if (_first == _last) return _last; + + std::destroy(_first, _last); + std::move(_last, end(), _first); + _size -= std::distance(_first, _last); - return first; + return _first; } template