如何通过迭代器从vector中擦除
How to erase from vector by iterator?
我想按索引擦除元素。在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);
}
相关文章:
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- 如何安全地擦除 std::vector 中的元素
- std::vector::erase() 真的会在擦除时使迭代器失效吗?
- 删除[]是否可以与通用数组正常使用?如果是这样,为什么使用std :: vector ::擦除它会导致释放内存的错误
- 为什么在 std::vector 擦除中需要 begin()
- 如何通过长度从 std::vector 中删除元素<string>(擦除不起作用)
- 擦除范围从std :: vector删除向量的最佳方法
- 根据向量大小擦除 for 循环内 std::vector 的索引
- 使用std :: vector ::用const_iterators擦除
- Vector::擦除分段故障
- std::vector::擦除异常安全
- 在擦除 std::vector 中的最后 n 个项目时是否进行了优化
- 如何擦除前 7 列加上最后一列,第 9 列,仅将第 8 列留在 3d 矢量中,例如 vector<vector<pair<int,int>>>?
- 使用 lambda 函数擦除 std::vector 中相同值的副本
- C ++擦除std::vector.end(),同时循环遍历所有迭代器
- 需要一个带有 O(1) 擦除的 std::vector
- std::vector push_back()擦除上一个元素
- 为什么允许擦除vector.end()
- c++在不重新分配的情况下擦除vector末端的部分