我想按索引擦除元素。内部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);
}
答案 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);
}