c++ - 使用迭代器删除元素,不知道 vector

标签 c++ templates c++11 vector iterator

我有一个情况。我为我的一项任务使用了模板化函数。对于这个函数,我通过引用传递迭代器。现在,我必须从 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/

相关文章:

c++ - Vector如何在特定位置调用复制构造函数?

c++ - 是否返回一个前向声明的结构未定义行为?

c++ - 如何在 SWIG 中包装可变模板类的可变模板成员函数?

c++ - 如何阻塞线程直到一个函数在另一个线程中返回?

c++ - 编译器是否被迫拒绝无效的 constexpr?

c++ - 为什么没有 std::future::try_wait()?

c++ - 共享对象加载 : version Qt_5 not defined in file

c++ - C++ 中的从属名称与非从属名称

string - 转到模板 : range over string

c++ - 使用采用模板化迭代器的自由函数重载 operator==