我有一个情况。我为我的一项任务使用了模板化函数。对于这个函数,我通过引用传递迭代器。现在,我必须从 vector 中删除几个元素。我如何仅使用迭代器来做到这一点?请找到相应的代码:
template <class BidirectionalIterator, class Iterator> bool
SomeFunc( BidirectionalIterator& first, BidirectionalIterator& last, Iterator anotherVecBegin )
{
while((first+1) != last)
{
if(some_condition)
// delete (first); HOW?
else if(some_other_condition)
// delete (first + 1); HOW?
}
// add something to another vector using anotherVecBegin
return true;
}
已经有很多问题被问到,但它们在上下文中都有一个 vector 。所以 myVec.erase(*first)
很简单..
我也知道通过引用传递迭代器并不是一个很好的方法。但我遵循简单的规则:在预期更改某些内容或避免大量复制时使用引用。我的场景符合第一个条件。
那么我该如何删除呢?
最佳答案
如果您只有容器元素的迭代器,则无法修改容器。迭代器的全部要点是将容器的概念与元素范围的概念分开,以便可以根据后者普遍地表达算法而不关心前者。这也是为什么我们有一个 remove
算法来置换一个范围并返回一个适合从容器中删除元素的迭代器,但删除需要由知道的人来完成容器。
关于c++ - 使用迭代器删除元素,不知道 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34718141/