Так что я пытаюсь реализовать класс векторных шаблонов, и я пытаюсь написать функцию стирания. Функция стирания принимает два итератора, start
и end
. Затем он стирает каждый элемент с позиции start
до end
, включая start
, но не end
. После того, как он стирает диапазон элементов, он сдвигает оставшиеся элементы так, что в середине массива нет пустых элементов (я могу попытаться объяснить, если это недостаточно ясно).Vector Template Class: erase (iterator begin, iterator end)
Частные данные для членов класса представляет собой целое число называется Size
, которая хранит текущее количество элементов в массиве, целое число называется Capacity
, которая хранит текущее пространство, выделенное для массива и массив называется Arr
. Я еще не доволен итераторами, может кто-нибудь объяснить мне, как я могу сделать это лучше или как это исправить?
template <typename T>
typename Vector<T>::iterator Vector<T>::erase(iterator start, iterator end)
{
iterator x = start;
for(; x != end; x++)
{
Arr[x].~T();
}
for(iterator x = start; x < theSize - (start - end); x++)
{
Arr[x] = Arr[x + (start - end)];
}
Size -= end - start;
}
* может кто-нибудь объяснить мне, как я могу сделать это лучше * - используйте 'зОго :: VECTOR'. Он работает уже. И что это? 'Arr [x]. ~ T();'? – PaulMcKenzie
Кроме того, std :: vector :: erase() просто перемещает элементы для стирания до конца вектора и просто изменяет запись 'size'. Ничто фактически не удаляется. – PaulMcKenzie