【问题标题】:How to erase from vector by iterator? [closed]如何通过迭代器从向量中擦除? [关闭]
【发布时间】:2014-06-21 18:26:09
【问题描述】:

我想按索引擦除元素。在 eraseIndexs 函数中,我可以访问开始和结束迭代器。当我从开始和结束迭代器创建向量时,会从它们创建一个新向量。

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

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

【问题讨论】:

  • "我想按索引擦除元素。"其次是“如何通过迭代器擦除元素?”你到底想要什么?
  • 我不知道你想做什么。为什么要尝试操作会超出范围的局部变量(向量)?
  • @KarolyHorvath 我想我们可以假设它不会。人们提供SSCCE很好:)
  • @keyser:确实如此。就在代码中。

标签: c++ iterator erase


【解决方案1】:

您没有删除任何内容

你正在你的函数中创建一个本地 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);
}

【讨论】:

    猜你喜欢
    • 2021-01-02
    • 1970-01-01
    • 2013-02-09
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多