使用迭代器删除元素,而不知道向量

Ado*_*orn 5 c++ templates iterator vector c++11

我有一个情况.我已经使用模板化函数完成了我的任务之一.对于这个函数,我通过引用传递迭代器.现在,我必须从向量中删除一些元素.如何仅使用迭代器来完成此操作?Pl找到相应的代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

有许多已经问过的问题,但它们都有一个上下文的向量.所以myVec.erase(*first)很容易..

我也知道它不是一个非常好的方式,我通过引用传递迭代器.但我遵循简单的规则:在预期某些事情发生变化时使用引用或避免重复复制.我的方案符合第一个条件.

那么如何删除?

Ker*_* SB 6

如果您拥有的只是容器元素的迭代器,则无法修改容器.迭代器的重点在于将容器的概念与元素范围的概念分开,因此算法可以用后者来普遍表达,而不用关心前者.这也是为什么我们有一个remove算法可以置换一个范围并返回一个适合从容器中删除元素的迭代器,但是擦除需要由知道容器的人来完成.

  • 见[`std::erase(std::remove_if())`习惯用法](http://en.cppreference.com/w/cpp/algorithm/remove) (2认同)