我有一个情况.我已经使用模板化函数完成了我的任务之一.对于这个函数,我通过引用传递迭代器.现在,我必须从向量中删除一些元素.如何仅使用迭代器来完成此操作?Pl找到相应的代码:
templatebool 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; }
有许多已经问过的问题,但它们都有一个上下文的向量.所以myVec.erase(*first)
很容易..
我也知道它不是一个非常好的方式,我通过引用传递迭代器.但我遵循简单的规则:在预期某些事情发生变化时使用引用或避免重复复制.我的方案符合第一个条件.
那么如何删除?
如果您拥有的只是容器元素的迭代器,则无法修改容器.迭代器的重点在于将容器的概念与元素范围的概念分开,因此算法可以用后者来普遍表达,而不用关心前者.这也是为什么我们有一个remove
算法可以置换一个范围并返回一个适合从容器中删除元素的迭代器,但是擦除需要由知道容器的人来完成.