C++ 向量模板类:擦除(迭代器开始、迭代器结束)
所以我试图实现一个向量模板类,并试图编写一个擦除函数。擦除函数使用两个迭代器,C++ 向量模板类:擦除(迭代器开始、迭代器结束),c++,arrays,templates,vector,iterator,C++,Arrays,Templates,Vector,Iterator,所以我试图实现一个向量模板类,并试图编写一个擦除函数。擦除函数使用两个迭代器,start和end。然后,它将从位置start到end擦除每个元素,包括start,但不包括end。在删除元素的范围之后,它移动元素,从而在数组的中间没有空元素(如果这不够清楚,我可以尝试解释得更好)。p> 类的私有成员数据是一个名为Size的整数,它存储数组中当前的元素数;一个名为Capacity的整数,它存储为数组分配的当前空间;一个名为Arr的数组。我对迭代器还不是很在行,有人能告诉我如何做得更好或者如何修复它吗
start
和end
。然后,它将从位置start
到end
擦除每个元素,包括start
,但不包括end
。在删除元素的范围之后,它移动元素,从而在数组的中间没有空元素(如果这不够清楚,我可以尝试解释得更好)。p>
类的私有成员数据是一个名为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;
}
模板
typename向量::迭代器向量::擦除(迭代器开始,迭代器结束)
{
迭代器x=开始;
对于(;x!=end;x++)
{
Arr[x].~T();
}
for(迭代器x=start;x <代码> > p>不能破坏向量中间的对象,然后分配给它们。只能指定给“活动”对象
您可以做的是(移动)将[end iterator,vector::end())
中的成员分配到start
和下面的元素上。然后销毁向量末尾多余的对象
下面是一个使用realstd::vector
接口和const_迭代器
对已擦除范围执行操作的示例:
iterator erase(const_iterator _First, const_iterator _Last)
{
const size_type _Offset = _First - cbegin();
const size_type _LastOffset = _Last - cbegin();
iterator _NewEnd = std::move(begin() + _LastOffset, end(), begin() + _Offset);
_DestroyData(_NewEnd, end());
_SetSize(_NewEnd - begin());
return begin() + _Offset;
}
有人能告诉我如何做得更好吗?使用std::vector
。它已经起作用了。这是关于什么的?Arr[x]。~T();
?还有,std::vector::erase()只需将要擦除的元素移动到向量的末尾,然后更改大小
条目。实际上没有删除任何内容。呃,您是从STL实现中复制的吗?