代码之家  ›  专栏  ›  技术社区  ›  Johan Hjalmarsson

为什么vector.erase会删除我所有的重复项?

  •  1
  • Johan Hjalmarsson  · 技术社区  · 12 年前

    我正试图删除向量中重复的数字。我用这个做那个:

    vec1.erase(   unique(vec1.begin(),vec1.end())   ,vec1.end());
    

    在谷歌上找到了它,它运行得很好,我的问题是为什么? 根据我在cplusplus上读到的内容, 擦除 从第一个参数移到最后一个参数。 例如:

    vec1.erase(vec1.begin(),vec1.begin()+3);  //removes first 3 elements
    

    唯一的 返回指向第一个副本的指针,所以在更简单的版本中,我要写的是:

    vec1.erase(first duplicate, vec1.end());
    

    我的向量不应该在第一个重复之后结束吗?

    1 回复  |  直到 12 年前
        1
  •  3
  •   ecatmur    12 年前

    std::unique 在适当的位置消除唯一的元素,并返回一个指向范围最终结果的指针。例如

    1 2 2 3 3 3
    ^begin      ^end
    

    变成

    1 2 3 . . . (garbage)
          ^ resulting end
    

    你在想 std::adjacent_find ,它确实向第一个重复元素返回了迭代器。