【发布时间】:2017-02-14 18:07:53
【问题描述】:
所以我正在尝试实现一个矢量模板类,并且我正在尝试编写一个擦除函数。擦除函数需要两个迭代器,start 和 end。然后它会擦除从位置start 到end 的每个元素,包括start,但不包括end。在它擦除元素范围后,它会将元素向左移动,以便数组中间没有空元素(如果不够清楚,我可以尝试更好地解释)。
类的私有成员数据是一个名为Size的整数,它存储数组中当前的元素个数,一个名为Capacity的整数,它存储为数组分配的当前空间,一个名为@的数组987654329@。我对迭代器还不是很了解,有人可以向我解释一下如何更好地做到这一点或如何解决它吗?
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;
}
【问题讨论】:
-
谁能给我解释一下如何才能做得更好 -- 使用
std::vector。它已经工作了。这是关于什么的?Arr[x].~T();? -
另外,std::vector::erase() 只会将要擦除的元素移动到向量的末尾,并且只需更改
size条目。实际上没有删除任何内容。
标签: c++ arrays templates vector iterator