如何通过迭代器从向量中删除?

时间:2014-06-21 18:26:09

标签: c++ iterator erase

我想按索引擦除元素。内部eraseIndexs功能我访问开始&结束迭代器。当我从begin和end迭代器创建一个向量时,从它们创建一个新的向量。

如何通过迭代器擦除元素?

template <typename ForwardIt>
void eraseIndexs(ForwardIt& begin, ForwardIt& end, const vector<size_t>& indexs){
    using T = typename iterator_traits<ForwardIt>::value_type;
    vector<T> v(begin, end);
    for (size_t index = 0; index < indexs.size(); index++)
        v.erase(v.begin() + indexs[index] - index);
}

1 个答案:

答案 0 :(得分:2)

您没有删除任何内容

您在函数中创建了一个本地std:vector

vector<T> v(begin, end);

然后从中删除

v.erase(v.begin() + indexs[index] - index);

它不会删除你的真实矢量迭代器。

如果您要从矢量中删除:

您必须将std::vector传递给您的函数并使用erase成员函数:

template <typename Container>
void eraseIndexs(Container& c, const vector<size_t>& indexs){
    for (size_t index = 0; index < indexs.size(); index++)
        c.erase(c.begin() + indexs[index] - index);
}