如何通过迭代器从vector中擦除

How to erase from vector by iterator?

本文关键字:擦除 vector 何通过 迭代器      更新时间:2023-10-16

我想按索引擦除元素。在eraseindexes函数中,我访问开始&迭代器。当从begin和end迭代器创建一个vector对象时,从它们创建一个新vector对象。

如何使用迭代器擦除元素?

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);
}

您没有擦除任何内容

你正在你的函数中创建一个本地std:vector:

vector<T> v(begin, end);

,然后从中删除

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

不擦除实际vector对象的迭代器

如果要从vector中擦除:

您必须将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);
}